2008/09/23

screenで40より大きな番号を設定する方法

GNU Screen の初期設定では作成できるウィンドウの上限は40ですが、これだと不都合が生じるときがあります。ここではそれ以上の数を設定する方法をまとめます。

複数のサーバに対して設定ファイルを編集するウィンドウ、コマンドを実行するウィンドウ、ログをtailするウィンドウ、などとしているとあっという間にウィンドウの数が二桁になります。

ウィンドウ番号が一桁のものは「C-a ウィンドウ番号」と簡単にアクセスできますので、私はそれらを頻繁に利用するウィンドウ用として空けておきたいので、10番以降を用途別、たとえばWebサーバは10番台、DBサーバは20番台等と決めて作業していますが、デフォルトではウィンドウは40までしか作成できず、私の今の用途ではちょっと足りません。

調べてみると、これは .screenrcで変更できるものではなく、コンパイル時に指定するようです。

わざわざバイナリが用意されている screenをそのためだけにコンパイルするのも気が引けますが、ちょうど開発版では縦分割やレイアウトなど正式リリースが待たれる機能が実装されていますので、それらを試用すべく開発版をコンパイルして使っています。
% cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/screen co screen
% cd screen/src
% export CFLAGS='-DMAXWIN=100'
% ./configure --prefix=/usr/local --enable-colors256
% make
% make install
100個のウィンドウを作成したことはないですが、これでウィンドウ番号を99まで設定でき、「~の作業は21番のウィンドウ」「50番台はログをtailしているウィンドウ」「あまり使わないのは90番台」などとウィンドウ番号によるカテゴライズに幅がもてるようになりました。(私はdefzombieでログアウトしたウィンドを閉じない設定にしてるのでウィンドウ番号は固定のほうが都合がよい)

設定する方法と言っておいて実はコンパイルオプションでしたというのはズルい気がしますが、一応変更できたことをメモします。

なお、一桁番号のウィンドウへの切り替えはデフォルトで「C-a 0」~「C-a 9」と定義されていますが、二桁以上の番号に対しても同じ手順で切り替えできるよう、「C-a ' ウィンドウ番号」(select)もよく使います。

2008/03/26

人生通帳を使ってみたが

わずかばかりな金利差を求めてソニー銀行を使っていますが、本日、新・お金管理ツールとして「人生通帳」なるサービスが提供されたようなので使ってみました。

新・お金管理ツール「人生通帳」提供開始のお知らせ
ソニーバンク口座に加え、他の金融機関、航空会社、携帯電話会社、ポイントサービス会社などの情報を一括管理。

アグリゲータサービスキター!!!という感じで使い倒そうと思っていたのですが、サイトログイン後に人生通帳を開くとなんか画面が変です...

2008/02/11

スクロールバッファの空白ではない始めの行に移動する方法

screenで大きめのスクロールバッファを確保したときに、有効な先頭行に移動する方法のヒントを見つけたのでメモしておく。

screen-usersに件の投稿があったのでそれをヒントにした。
How to go to the beginning of the scrollback buffer
ここでは自己レスとして次の様な解があがっていた。
bindkey -m b stuff "g/e^["
  • bindkeyでコピーモードに「b」と言うキーを
  • 先頭行に移動して(g)
  • 「e」で始まる行を検索(/g^[)
なるほど、「g」で1行目に移動して、出現頻度の高い文字「e」で検索すれば最初の有効な先頭行になるだろうと言うことですか。

コピーモードの検索において正規表現が使えれば楽なんでしょうけど、こういう方法があるんですね。それ以前にstuffなるコマンドを初めて知りました。結構manは読んだつもりだったのですが...

自分の環境では「e」で検索してもあまり意図したところに飛んでくれないので次の様にしてみた。
bindkey -m -t ;b stuff "g/:^M^F^B"
  • b」だとコマンドモード中に入力している「b」に反応してしまうので「;b」に変更
  • 改行は「^[」ではなく「^M」に変更
  • 検索文字は「e」ではなく「:」に変更
  • ヒットした行を画面最上部に持ってきたいので「^F」「^B」でページ移動
検索文字を「:」にした理由は、普段「verbose on」で使っているため、新規ウィンドウ「C-a c」の先頭は次の様になるからです。
:screen (zsh): /usr/bin/zsh
yoshikaw@hoge[4] ~%
スクロールバッファが全て満たされているときにこのコマンドを実行すると意図しない行に移動してしまいますが、それはそれでまた「g」すればいいだけなので我慢します。

2009/08/29 追記
screenrc中にコントロールキャラクタを入れるとコピペ時に面倒なので8進数で表記する。
bindkey -m ;b eval 'stuff g/:\015\006\002'
  • 入力中のタイムアウトは気にしないので「-t」は削除

2010/11/27 追記
screen-usersに目から鱗な回答がありました。コレを覚えておけば、ここまで書いてきた無駄なbindせずにすみますね。
Re: Question Regarding Navigating the Buffer
Enter scrollback mode then hit "g w"

2008/02/10

.screenrcを晒してみる

仕事がら複数のサーバで作業することが多いので2年ほど前からGNU Screenを使い始めましたが、非常に危険です、コレ。もうこれがないと生きてゆけなくなりました。せっかくなのでネット上での先駆者の設定を拝借したりしてコツコツとカスタマイズしてきた内容を晒してみます。

2008/01/03

VMware Server@Windows 2000が自動起動しない場合の対策

会社の Windows 2000 Server(SP4) で動かしている VMware Server(1.0.4)がOS起動時に実行されていないことに気づいた。調べてみるとサービスの起動順序に問題があるみたいなので対応した内容を記しておく。

起動しないときのサービス状態を確認すると、VMware Authorization Serviceと言う物が止まっていた。こいつを手動で開始すると、VMware Serverも使える様になる。なんでかな~、とおもってググってみるとやはり解決法が。

VMware Server が 2回目以降使えない
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VMAuthdService]
"DependOnService"=hex(7):76,00,6d,00,78,00,38,00,36,00,00,00,77,00,6d,00,69,00,\
00,00,00,00

で直ったようです。元々「vmx86」だったところを「vmx86 wmi」に変更した形です。
こちらのレジストリ設定を参考にさせていただいたところ、問題は解決しました。
"DependOnService"というエントリ名からしてWMI が事前に動いている必要があったんでしょうね。

2007/10/14

Google Browser Syncのログ出力を止める

Firefoxの各種設定を共有できるGoogle Browser Syncは大変便利ですが、気づくと profile 以下がこのログによって肥大化します。
(%AppData%\Mozilla\Firefox\Profiles\xxxxxx\browserstate-logs\log-yyyymmdd-xxxxxx-xxx.txt)

このログ出力を無効にするには、about:config で「google-debug-service.logfileenabled」という真偽値を「false」で新規作成すればよいみたいです。

エントリ名だけ見ると Google Browser Sync以外にも Google製Firefoxプラグイン全般のログ設定を止めそうですが、まあ気にしないことにします。

2007/03/04

Firefox のフィード・リーダとしてGoogle Readerを登録する方法

about:configで編集するか、users.js などに以下を追加すると幸せになれるようです。
(他に何も追加していなければ6番目のリーダとして登録)

via http://at-aka.blogspot.com/2006/10/firefox-20_26.html
user_pref("browser.contentHandlers.auto.application/vnd.mozilla.maybe.feed", "http://google.com/reader/view/feed/%s");
user_pref("browser.contentHandlers.types.6.title", "Google Reader");
user_pref("browser.contentHandlers.types.6.type", "application/vnd.mozilla.maybe.feed");
user_pref("browser.contentHandlers.types.6.uri", "http://google.com/reader/view/feed/%s");