GNU screen その6(再生)
screen使ってて間違って違う鯖をシャットダウンした経験は誰でもあるはず screenのせいにするなよ!
リモートからログインできればscreen関係なしにそんなこと誰だって一回はやるだろ! シャットダウン自体をめったにしないからとか?
俺はそうなので、違う鯖をシャットダウンした!なんてことはないなぁ。 シャットダウンするときはマシンの電源をいじれる場所に行くから
だな ホスト名をプロンプトに表示してるし、トラブル時を除いて遠隔からの
リブート自体基本的にやらないから、そういうので焦ったことは無いかも。
計画的に電源落とす時はシリアルケーブル繋いでやるし。
VMWareなんかでテスト環境で遊んでる時位だな、リブート頻繁ってのは サーバーラックの後ろに廻って
シャットダウンした鯖の電源ケーブル抜いたつもりが
違う鯖だったので焦ったことはある そもそも鯖室って、照明暗いのに、電源ケーブル黒いし、最近は
黒い筐体が流行で困る。 後ろのファンのところにリボン付けて、
動いてるかどうかを見るのが良いらしい。 サーバー用鯉のぼりとか出すと売れるかもしれないな。 サーバメーカは5文字くらい表示制御できる液晶を前後の蓋に
付けて欲しいよな。そんで起動時にhostname>/dev/namelabelすると
そこに表示されるの。 HPサーバについてるランプはそんな目的なのかな
iLO2経由で制御できる
たしか前面にしかなかったけど そんな目的の機構は結構各メーカーにあるね。
サーバ単位で同定するためのとかHDD単位で同定するとか RAIDのHDD取り違え事件はかなりヤバイ
マシンの電源ケーブル間違えて引っこ抜く方がまだましな位 >>362
鯉幟よりも鯖幟で売り出した方が売れるかな putty+screenで
termcapinfo xterm* ti@:te@
と設定したのですがスクロールが出来ません
何か他に設定があるんでしょうか? debian etchのパッケージを使ってたんですが、screen上でmuttの表示が崩れるのを直したくて
でかいのネットさんの非公式パッチを頂いてソースからビルドしてみたのですが
どうも表示の崩れが直らず、試行錯誤していたところ、どうも defbce "on" をすると崩れなくなる
ようでした。本家Gitの最新ソースでも、やはり同じ結果でした。
みなさんそういう感じでしょうか? それとも何か自分おかしなことしてそうでしょうか? screen頻繁に使っている人がいそうなので質問させてください
こちらの方は、GUIやブラウザの重さに飽き飽きしてきました。
なるべくCUIで快適にすごしたいのですが、みなさんはどのように画面を構成しているのでしょうか?
おすすめな環境構築の方法を教えてください。
主にWindowsからUnix機へ繋いで繋いで使うことも多いのですがさんこうにならないかと 日本語入力ON にして keybind で paste . すると
<81><82> 2バイトが入力されるんですが、
これどういう仕様か判る人います?
ちなみに keybind は
escape ^]]
bind a paste .
です。 xterm 上。
あと colon から :paste . すると普通に paste できます。
... とここまで書いてふと気付いた。
% xxd
あ
0000000: e381 820a ....
そりゃそうか。いやでもこれなんとかならんかな。
xterm に screen と協調してもらうのは無理か。
bind あ paste . はできないようだ。
bind ^a paste . が落とし所か。てか既に .screenrc にあった。
bind a に慣れてるからなー。 a でいきたいけどダメかなこれ。
ダメですかね。まーいいか。いやあまりよくない。 なんで「あ」なの?
日本語モードで A をタイプインしたら普通「ち」だろう
>>373
bind a eval 'paste .'
とか >>374
普通ローマ字入力だろう、と思っていたが。
カナキー入力とか azik より少数だと思ってましたよ。
>>375
それ paste . と同じじゃないです?
わざわざ書くからには違うのか。からくりが解らん。 ギレン総帥は、カナタイパー。
俺もカナタイパーだから分かるw screen-4.00.03/zsh-4.3.11/mintty-svn/cygwin-1.7 で
別ウィンドウに ~/bin/hoge を実行しようと zsh から screen hoge すると
Cannot exec 'hoge': No such file or directory
とタイトルバーに表示されて実行できません
~/.zshrc ~/.zshenv ~/.zprofile の全部に
export PATH=$HOME/bin:$PATH
を書いても同じで実行できませんでした
zsh で hoge とすれば実行できるのでPATHは通ってると思うんですが
screen hoge で実行できない原因は何が考えられるでしょうか? screen `which hoge` ならどうですか?
zshの内部コマンドだったってオチとか? >>379
screen `which hoge` だとちゃんと実行できました
(which hoge がフルパスを返すので当たり前かもしれませんが)
zsh の内部コマンドではなく自作のpythonスクリプトで
パーミッション755にして実行可能になってます >>381
~/.zlogin はなかったので作ってやってみましたが同じでした。
自分で調べてみてわかったことがあるので補足します。
/etc/passwd のログインシェルはデフォルトの /bin/bash のままで
~/.screenrc には shell zsh と書いてます。
端末の起動には、mintty.exe -e screen -xRR のショートカットを作成し、
これを実行すると screen 上に zsh が立ち上がり、
~/.zshenv と ~/.zshrc を読み込んでることを確認しました。
(各ドットファイルの先頭に echo ファイル名 >> $HOME/log.txt でログ出力して)
この状態で screen hoge すると >>378 のようになります。
このとき、log.txt には何も追記されてませんでした。
(つまり、screen hoge 実行時には ~/.zshenv も ~/.zshrc も読まない?)
上とは別にテストのために minnty.exe を直接起動してみました。
すると当然 bash が立ち上がります(~/.bashrc を読み込む)。
bash から screen を起動すると zsh が立ち上がります(~/.zshenv と ~/.zshrc を読み込む)。
この状態で screen hoge すると正常に別ウィンドウで実行できました。
このとき、log.txt には何も追記されてませんでした。
下の方法では bash が無駄なプロセスに思うので、
上の方法でも screen hoge できるようにしたいのですが、
何かわかる方いれば助言をお願いします。 方法1 素直にログインシェルをzshにする
何らかの理由でそれができないなら
方法2 .bashrcにPATHを設定するスクリプトを書く
回避策としてはそれだろうねぇ。
なんでbashが起動してるのかわからないけど。 なんでって ログインシェルが/bin/bashだからでしょ? > ~/.screenrc には shell zsh と書いてます。
> bash から screen を起動すると zsh が立ち上がります
じゃあこの挙動が不正ってこと? .bashrcに exec /path/to/zsh って書いとけよ >>382
>端末の起動には、mintty.exe -e screen -xRR のショートカットを作成し
cygwin は詳しくないんだけど、おそらくそれだと zsh の環境変数が screen 本体に継承されてないので、
screen -X setenv PATH "$HOME/bin:$PATH"
してみたら?
自分でも試してみようと久々に screen をインストールしていざ起動したら「$TERM too long - sorry.」
とか出るし。もういいや。 >>383-384
ログインシェルを zsh にしてみましたが同じでした。
説明不足で申し訳ありませんが ~/.bashrc にもPATHは設定してます。
>>386
それは不正ではないんじゃないですか?
>>388
~/.screenrc に setenv PATH "$HOME/bin:$PATH"
を追加したら screen hoge を実行できるようになりました。
あるいは、ショートカットを mintty.exe -e bash -i -c screen -xRR
とすることでも screen hoge を実行できるようになりました(-i なしじゃダメ)。
この場合 bash のプロセスは残らないんですがどこ行ったんでしょ?
ともかく原因と対処法はわかりましたのでありがとうございました。 >>389
SHELL=/bin/zsh
みたいな環境変数セットすればいい ・utf-8
・ambiguous widthは2
・↑の設定のhogeterm + screen上でdialog等の罫線表示が崩れない
これを実現できる設定教えて欲しい。
実現できるなら端末エミュはなんでもいい。
・euc-jpにする
・ambiguous widthは1で我慢
・罫線表示するようなコマンド打つ前にset TERM=vt100
などの回避策はなしで。
誰も答えられないようなら
「いや〜screen内で全部済むからw」
とか言う奴を見かけたら次から心の底でバカにすることにする。 >>391
その3つの条件だけなら、terminfoいじればいいよ。好きな端末を起動してこ
のコマンドを実行しておくだけ。
$ infocmp | sed 's/[a-z]*acs[a-z]*=[^,]*,//' > /tmp/tmp
$ tic /tmp/tmp
だれもが通る道だ
そしてascii表示でお茶を濁す。この人とか
ttp://d.hatena.ne.jp/niha/20090130 んん?
その人がしてるのはmltermにせっかく1カラムのDEC特殊文字で
表示してくれる機能あるのにscreenが間に入ると先に処理されて
mltermの機能が生かせないって話だ とりあえず mlterm+screen+w3m で折り合ってくれている現状で満足だ
深入りすると腹が立ってくる infoの出力箇所をかえることはできますか?
4.1だとステータスラインにでてくれるけど4.0.3だとウィンドウのタイトルバーにでてくるのでいつも見失う コピーモードで一旦スペース押してマークして、
でもやっぱやめたくてマークをキャンセルするキーってありますか? >>399
なさそうだけどx(マークとカーソルの入れ替え)で対処できる。 >>400
なるほど!
xは押してみたけど一見してダメだと思い込んでました。
ありがとう! 質問させてください
detachして再接続をするとウインドウの分割した状態が復元されません
公式のFAQを見るとウインドウの復元は基本的にできない、もしやるならscreenをネストするとありました
普段ウインドウを分割している方はどのようにセッションを復元されていますか?
Screen version 4.00.03です screenの中からX clientを起動したときに
外のDISPLAYに接続できるようにするスクリプトをかいてみたです。
screenの中のemacsからでもいけます。
hg clone https://koie@bitbucket.org/koie/screenx
今osxのiTerm2で使っているのですが
ctrl-tabで次のscreenに移動するのが実現できません。
どなたかosxでやっているかたいませんでしょうか?
いちおう.screenrcには他のOSでもやっているとおりで
bindkey "^[[1;5I" next
bindkey "^[[1;6I" prev
と書いているのですが
sshで外からwindowsのminttyでmacにつなぐと
うまくいくので.screenrcではなく
iTerm2の設定の問題だと思うのですが
vis の入力で ctrl-tab 打ってみれば?
osx に vis あるかしらんけど。 OSXにも vis あるよ
NAME
vis -- display non-printable characters in a visual format
SYNOPSIS
vis [-cbflnostw] [-F foldwidth] [file ...]
でもiTerm2の問題だと思うならMac板のUNIX系スレのが良いのでは >408 を理解できない人になにをいっても無駄でしょ ttp://bogytech.blogspot.com/search/label/screen
GNU screen JIS X 0213 /UTF-8 拡張パッチ
というものを見つけました。
jless utf-8 パッチとkterm JIS X 0213/UTF-8 パッチもあり。
(個人的には、jless utf-8 パッチがありがたいです) screen -X exec sh -c "xsel -i < ~/.screen_exchange" ; sleep 0.1; xsel
を実行するとよく X selection の内容が変わらなかったりします。
sh -c "xsel -i < ~/.screen_exchange" ; sleep 0.1; xsel
だと変わります。screen -X exec sh -c と sh -c で何が違うのでしょうか?
試しに zsh で
i=$RANDOM; screen -X exec zsh -c "xsel -i <<<$i" ; echo -n $i: ; sleep 0.1; xsel
を連続実行するとやはり内容が変わらなかったりします。4回くらい実行すると変わったりします。
i=$RANDOM; zsh -c "xsel -i <<<$i"; echo -n $i: ; sleep 0.1; xsel
だとやはり変わります。
i=$RANDOM; screen -X exec zsh -c "xsel -i <<<$i;sleep 0.1" ; echo -n $i: ; sleep 0.1; xsel
でも変わります。 どうやら screen の exec 終了時に SIGHUP が送られているようです。
xsel は background process になるので、すぐに exec が終わり
SIGHUP 発行となっているようす。
なので nohup を使って以下のようにすることで、問題は解消しました。
screen -X exec sh -c "nohup xsel -i < ~/.screen_exchange &>/dev/null"
# nohup 使いにくい。nohup.out 作ったり、その旨のメッセージを出したりしなくていいのに。 何も案を出せずにごめん、そして解決方法を書いてくれてありがとう >>417
自分自身でforkするプロセスはwaitできないよ(笑)
>>415
xsel -n で、forkしないようにできるけど。
あと、nohupの代わりに trap '' 1 で HUP無視する方法も。 >>418
-n 付けて detach 抑制すると xsel が生きている間、
端末に制御が戻ってこないので問題があります。
trap は色々試した結果、このケースだとうまく trap されなかったんですが…
気になって今試したら trap '' HUP だとうまくいくことが判明。
前に試した時は trap 'echo foo' HUP とかやってたんですが、これだとうまく trap されない。
(nohup されないのはいいんですが、echo されず、trap されていることが確認できなかった。touch /tmp/trapped でも同じ)
というか trap '' HUP だとシグナル無視だけど、 '' じゃないと書いてあることを追加で実行するだけで、
元の挙動を抑制する訳じゃないのか。勘違いしていた。そういえばそうだった気もする。
シグナル無視と追加実行で trap される範囲が違うのか…?
まあもう nohup にしときますけどね。trap '' HUP の方が &>/dev/null 書かなくていいし多分速いけど。 どのnohup/trap使ってる? 内部/外部?
tcshの内部nohupを使えば解決するような希ガスんだが、どうしてもzsh使いたいの? 別にそんなことはありません。
nohup は /usr/bin/nohup です。
trap は sh というか bash です。済みません、まぎらわしいですね。linux です。
zsh は試しに使いましたが、screen に渡しているのは bash です。
# nohup 使う方法も zsh から呼ぶとなぜかうまく動かなかったし、
# 適当に試しただけですが、&! も setopt nohup もうまく動かず、disown はちょっと違うので、
# 結局 zsh は採用していません。
その builtin nohup は正に期待するもののようですが、
今は csh/tcsh を入れていないので残念ながら &>/dev/null しときます。 ウインドウを新規作成した時
ホームディレクトリじゃなくて、
作成元のディレクトリをカレントディレクトリにしたいのですが
どうすればいいですか? シェルから screen と入力してウィンドウを新規作成すると
起動元のシェルのカレントディレクトリが引き継がれるよ >>424
ほんとだっ
こんなに簡単に実現できるとは
ありがとうございました 各windowのカレントディレクトリのリストを確認したいのですが
どうすればできますか? whoコマンドかwコマンドでscreenから起動されてるttyを調べて
/procファイルシステムを舐めてカレントディレクトリを調べる
スクリプトを書けば不可能ではなさそう screen使うと、viとか起動/終了した時に画面が戻らないんですけど、
普通のxtermと同じように画面を復帰するようにできませんか? TERMINFO/TERMCAPのscreen端末設定を修正すればできるよ
$ man terminfo >>429
それはすでにやりましたが、直りません。
「man hoge」の回答者って確認せずに回答する人多いですよね。 そりゃ環境もやったことも書かないような間抜けにはそういう回答しかできないのでは >>431
横レスだが、環境問わずscreenではそもそも >>428 の設定は不可能なのだが、
可能かのように知ったか回答してる >>429 が間抜けかと。 >>435
できました!!ありがとう!!!
ちなみにterminfoの設定は元に戻しました(笑) 横レスだが、環境によってはできるにもかかわらず、環境に問わず不可能だという回答をする人は… 横レスだが、環境問わず TERMINFO/TERMCAPのscreen端末設定では設定不可能だよw vim上でHomeやファンクションキーが効かないので、
.screenrcで
term xterm
と元のTERMを書いちゃったんですが、これって正しい使い方ですか?
そもそもなんでscreenを起動するとTERM=screenになるのか
意義がわからないのですが。 >>441
screen自身がエスケープシーケンス解釈するから、アプリケーションから
screenの知らないエスケープシーケンスが飛んでくることを避けるために
TERM=screenにしてるんだよ term xtermと書くのって普通ですか?
それともファンクションキーとかを使うのはあきらめる? 色々調べた結果、~/.screenrcに
termcapinfo xterm* 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm:k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~'
とk1からk4を書いておけばファンクションキーが使えるようになりました。
多分term xtermでも大丈夫と思うんですが、screenの知らないエスケープシーケンスが
という問題はなくなるかと。 >>184の問題って今どうなってるの?
あんまりみんな気にしてないのかな >>445
tmuxだと環境変数を自動で設定してくれるみたい。
screenだとvncのなかでscreenを起動して
Xは全部vncに表示するのが一番簡単・無難かと。
detachしてもXは生きたままにできるし、遅い回線でも使い物になる。
ただvncだとscreenとXが同じマシンのときに遅さが気になるので
screenxというのをつくってつかっています。
>>446
>tmuxだと環境変数を自動で設定してくれるみたい。
マジですか
どういう仕組みでやってんだろ