「GNU Screen」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:ターミナルエミュレータ en:GNU Screen ru:GNU Screen zh-CN:GNU Screen {{Related articles start}} {{Related|tmux}} {{Related articles end...」)
 
(同期)
45行目: 45行目:
 
$ screen -S ''session_name''
 
$ screen -S ''session_name''
   
  +
既存のセッションの名前を変更するには、screen が実行しているときに次のコマンドを実行: {{ic|ctrl+a}} {{ic|:sessionname ''session_name''}}。
To prints a list of ''pid.tty.host'' strings identifying your screen sessions:
 
  +
  +
screen のセッションを識別する ''pid.tty.host'' 文字列のリストを出力するには:
   
 
$ screen -list
 
$ screen -list
52行目: 54行目:
   
 
$ screen -x ''session_name''
 
$ screen -x ''session_name''
  +
  +
または:
  +
  +
$ screen -r ''session_name''
   
 
=== systemd で自動起動 ===
 
=== systemd で自動起動 ===
   
以下のサービスは特定のユーザーで screen を自動的に起動します (例: {{ic|systemctl enable screen@florian}}):
+
以下のサービスは特定のユーザーで screen を自動的に起動します (例: {{ic|systemctl enable screen@florian}})。[[systemd/ユーザー|systemd --user]] インスタンスは特定のユーザーの最後のセッションが閉じたときに終了されることが保証されていないので、システムユニットとして実行する必要があります。
   
 
{{hc|/etc/systemd/system/screen@.service|<nowiki>
 
{{hc|/etc/systemd/system/screen@.service|<nowiki>
63行目: 69行目:
   
 
[Service]
 
[Service]
Type=forking
+
Type=simple
 
User=%i
 
User=%i
ExecStart=/usr/bin/screen -dmS autoscreen
+
ExecStart=/usr/bin/screen -DmS autoscreen
 
ExecStop=/usr/bin/screen -S autoscreen -X quit
 
ExecStop=/usr/bin/screen -S autoscreen -X quit
   
99行目: 105行目:
 
* {{ic|ctrl+a}} {{ic|a}} {{ic|K}} Kills the inner screen session.
 
* {{ic|ctrl+a}} {{ic|a}} {{ic|K}} Kills the inner screen session.
   
=== Use 256 colors ===
+
=== 256色を使う ===
   
By default, screen uses an 8-color terminal emulator. To enable more colors, you need to be using a terminal that supports them and set the correct [http://aperiodic.net/screen/commands:term term] value. This will use [[wikipedia:Terminfo|terminfo]] to describe how the [[wikipedia:ANSI escape code|ANSI escape codes]] will be interpreted. An entry in the terminfo database structure must exist, {{Pkg|ncurses}} provides many common descriptions stored under {{ic|/usr/share/terminfo/}}.
+
デフォルトでは、screen 8色のターミナルエミュレータを使います。他の色を使えるようにするには、多色対応しているターミナルを使用して [http://aperiodic.net/screen/commands:term term] の値を適切に設定する必要があります。[[wikipedia:Terminfo|terminfo]] を使って[[wikipedia:ANSI escape code|ANSI エスケープコード]]の解釈方法が決められます。terminfo のデータベースにエントリが存在している必要があり、{{Pkg|ncurses}} に一般的な記述子が含まれていて {{ic|/usr/share/terminfo/}} に保存されます。
   
  +
まずは汎用の値を試してください:
First try the generic value:
 
   
 
{{hc|~/.screenrc|
 
{{hc|~/.screenrc|
109行目: 115行目:
 
}}
 
}}
   
  +
上記で上手く行かない場合、使用しているターミナルにあわせて設定してみてください。例えば [[xterm]] ベースのターミナルを使っている場合:
If that does not work, try setting it based on the used terminal. When using [[xterm]]-based terminal:
 
   
 
{{hc|~/.screenrc|
 
{{hc|~/.screenrc|
115行目: 121行目:
 
}}
 
}}
   
When using [[rxvt-unicode]]:
+
[[rxvt-unicode]] を使用する場合:
   
 
{{hc|~/.screenrc|
 
{{hc|~/.screenrc|
121行目: 127行目:
 
}}
 
}}
   
{{Note|{{ic|/usr/share/terminfo/r/rxvt-unicode-256color}} is provided by {{Pkg|rxvt-unicode-terminfo}}, which is installed as a dependency of {{Pkg|rxvt-unicode}}. However, if you log into a server via [[SSH]] and run ''screen'' there, this terminfo file might not be available on the server. In this case it is recommended to copy {{ic|/usr/share/terminfo/r/rxvt-unicode-256color}} on the server, it can be saved in {{ic|~/.terminfo}}.}}
+
{{Note|{{ic|/usr/share/terminfo/r/rxvt-unicode-256color}} {{Pkg|rxvt-unicode-terminfo}} に入っています。このパッケージは {{Pkg|rxvt-unicode}} の依存パッケージとしてインストールされます。ただし、[[SSH]] を介してサーバーにログインして ''screen'' を実行している場合、terminfo ファイルがサーバー側に存在しない可能性があります。その場合、サーバーに {{ic|/usr/share/terminfo/r/rxvt-unicode-256color}} をコピーして {{ic|~/.terminfo}} に保存することを推奨します。}}
   
As a last resort, try setting [http://aperiodic.net/screen/commands:termcapinfo termcapinfo] instead:
+
上記の設定が駄目ならば最後の手段として、[http://aperiodic.net/screen/commands:termcapinfo termcapinfo] を設定してください:
   
 
{{hc|~/.screenrc|<nowiki>
 
{{hc|~/.screenrc|<nowiki>
131行目: 137行目:
 
</nowiki>}}
 
</nowiki>}}
   
=== Informative statusbar ===
+
=== 有益なステータスバー ===
   
  +
デフォルトのステータスバーは情報が少なすぎます。以下のように設定すると良いでしょう:
The default statusbar may be a little lacking. You may find this one more helpful:
 
   
 
{{hc|~/.screenrc|<nowiki>
 
{{hc|~/.screenrc|<nowiki>
141行目: 147行目:
 
</nowiki>}}
 
</nowiki>}}
   
Another possibility, taken from [http://www.fordfrog.com/2012/09/02/71/ frodfrog's blog] is:
+
あるいは、[http://www.fordfrog.com/2012/09/02/71/ frodfrog のブログ] に書かれている例:
   
 
{{hc|~/.screenrc|<nowiki>
 
{{hc|~/.screenrc|<nowiki>
153行目: 159行目:
 
}}
 
}}
   
=== Turn your hardstatus line into a dynamic urxvt|xterm|aterm window title ===
+
=== hardstatus 行を urxvt|xterm|aterm のウィンドウタイトルに動的に変える ===
   
 
This one is pretty simple; just switch your current {{ic|hardstatus}} line into a {{ic|caption}} line with notification, and edit accordingly:
 
This one is pretty simple; just switch your current {{ic|hardstatus}} line into a {{ic|caption}} line with notification, and edit accordingly:
166行目: 172行目:
 
This will give you something like {{ic|screen (0 bash)}} in the title of your terminal emulator. The caption supplies the date, current time, and colorizes your screen window collection.
 
This will give you something like {{ic|screen (0 bash)}} in the title of your terminal emulator. The caption supplies the date, current time, and colorizes your screen window collection.
   
  +
===X のスクロール機能を使う===
===Use X scrolling mechanism===
 
   
  +
GNU Screen のスクロールバッファは {{ic|ctrl+a}} {{ic|[}} で読むことができますが、不便です。xterm や konsole などのスクロールバーを使うには、以下の行を追加してください:
The scroll buffer of GNU Screen can be accessed with {{ic|ctrl+a}} {{ic|[}}. However, this is very inconvenient. To use the scroll bar of e.g. xterm or konsole, add the following line:
 
 
{{hc|~/.screenrc|
 
{{hc|~/.screenrc|
 
termcapinfo xterm* ti@:te@
 
termcapinfo xterm* ti@:te@
175行目: 181行目:
 
=== 動作中のプログラムを screen にアタッチ ===
 
=== 動作中のプログラムを screen にアタッチ ===
   
  +
screen の外で起動したプログラムを中に持って行きたい場合、'''reptyr''' を使うことでプロセスの親を tty から screen に変えることができます。
If you started a program outside screen, but now you would like it to be inside, you can use '''reptyr''' to reparent the process from it's current tty to one inside screen.
 
   
 
[[公式リポジトリ]]から {{Pkg|reptyr}} パッケージを[[インストール]]してください。
 
[[公式リポジトリ]]から {{Pkg|reptyr}} パッケージを[[インストール]]してください。
   
  +
プロセスの PID を取得してください ({{ic|ps ax}} を使えば取得できます)。reptyr の引数として取得した PID を入力して screen ウィンドウの中で実行してください:
Get the PID of the process (you can use {{ic|ps ax}} for that). Now just enter the PID as argument to reptyr inside a screen window.
 
 
{{bc|$ reptyr ''<pid>''}}
 
{{bc|$ reptyr ''<pid>''}}
   
===Setting a different bash prompt while in screen===
+
===screen で別の bash プロンプトを設定===
   
  +
screen セッションで別の bash プロンプトを使いたい場合、以下を {{ic|.bashrc}} に追加してください [http://serverfault.com/questions/257975/how-to-check-if-im-in-screen-session]:
If you want a different bash prompt when in a screen session, add the following to your .bashrc:
 
 
{{bc|<nowiki>
 
{{bc|<nowiki>
 
if [ -z $STY ]
 
if [ -z $STY ]
193行目: 199行目:
 
fi
 
fi
 
</nowiki>}}
 
</nowiki>}}
[http://serverfault.com/questions/257975/how-to-check-if-im-in-screen-session]
 
   
 
===ビジュアルベルを切る===
 
===ビジュアルベルを切る===
214行目: 219行目:
 
altscreen on
 
altscreen on
 
}}
 
}}
  +
  +
=== ウィンドウリストの Name カラムに "bash" としか表示されない ===
  +
  +
{{ic|~/.screenrc}} に以下を追加してください:
  +
{{hc|head=~/.screenrc|output=windowlist string "%4n %h%=%f"}}
   
 
== 参照 ==
 
== 参照 ==

2016年2月8日 (月) 17:29時点における版

関連記事

GNU Screen はテキストプログラムとシェルを分離させることができるラッパーです。Screen を使うことで、例えば、X のターミナルでテキストプログラムを起動して、X を終了し、プログラムを使い続けることなどが可能になります。

インストール

GNU Screen は公式リポジトリscreen パッケージを使ってインストールできます。

使用方法

コマンドを入力するときは ctrl+a を押してからキーバインディングを押します。

よく使われるコマンド

  • ctrl+a ? コマンドとコマンドのデフォルトを表示 (とても重要です)
  • ctrl+a : screen のコマンドプロンプトに入る
  • ctrl+a " ウィンドウリスト
  • ctrl+a 0 ウィンドウ0を開く
  • ctrl+a A 現在のウィンドウの名前を変更
  • ctrl+a a 現在のウィンドウに ctrl+a を送信
  • ctrl+a c 新しいウィンドウ (とシェル) を作成
  • ctrl+a S 現在の領域を2つの領域に分割
  • ctrl+a tab 次の領域に入力フォーカスを移動
  • ctrl+a ctrl+a 現在の領域と前の領域を切り替え
  • ctrl+a Esc コピーモードに入ります (enter を使ってテキストの範囲を選択)
  • ctrl+a ] テキストの貼り付け
  • ctrl+a Q 現在の領域以外の全ての領域を閉じる
  • ctrl+a X 現在の領域を閉じる
  • ctrl+a d 現在のスクリーンセッションからデタッチ、動作し続ける。復帰するには screen -r を使う

コマンドプロンプトコマンド

  • ctrl+a :quit 全てのウィンドウと screen セッションを終了
  • ctrl+a :source ~/.screenrc screenrc 設定ファイルをリロード (/etc/screenrc を使うことも可能)

セッションに名前を付ける

名前付きセッションを作成するには、次のコマンドで screen を起動します:

$ screen -S session_name

既存のセッションの名前を変更するには、screen が実行しているときに次のコマンドを実行: ctrl+a :sessionname session_name

screen のセッションを識別する pid.tty.host 文字列のリストを出力するには:

$ screen -list

名前付きスクリーンセッションにアタッチするには、次のコマンドを実行:

$ screen -x session_name

または:

$ screen -r session_name

systemd で自動起動

以下のサービスは特定のユーザーで screen を自動的に起動します (例: systemctl enable screen@florian)。systemd --user インスタンスは特定のユーザーの最後のセッションが閉じたときに終了されることが保証されていないので、システムユニットとして実行する必要があります。

/etc/systemd/system/screen@.service
[Unit]
Description=screen
After=network.target

[Service]
Type=simple
User=%i
ExecStart=/usr/bin/screen -DmS autoscreen
ExecStop=/usr/bin/screen -S autoscreen -X quit

[Install]
WantedBy=multi-user.target

Tips and tricks

エスケープキーを変更する

エスケープキーは ~/.screenrcescape オプションで変更できます。例:

escape ``

上の場合エスケープキーは ` に設定されます。

escape ^^^

これだと ctrl+^ に設定されます。

ウィンドウ1から起動

デフォルトでは、一番最初のスクリーンウィンドウは0です。ウィンドウ0を使わずに1から起動して欲しい場合、設定に以下の行を追加してください:

~/.screenrc
bind c screen 1
bind ^c screen 1
bind 0 select 10                                                            
screen 1

入れ子のスクリーンセッション

It is possible to get stuck in a nested screen session. A common scenario: you start an ssh session from within a screen session. Within the ssh session, you start screen. By default, the outer screen session that was launched first responds to ctrl+a commands. To send a command to the inner screen session, use ctrl+a a, followed by your command. For example:

  • ctrl+a a d Detaches the inner screen session.
  • ctrl+a a K Kills the inner screen session.

256色を使う

デフォルトでは、screen は8色のターミナルエミュレータを使います。他の色を使えるようにするには、多色対応しているターミナルを使用して term の値を適切に設定する必要があります。terminfo を使ってANSI エスケープコードの解釈方法が決められます。terminfo のデータベースにエントリが存在している必要があり、ncurses に一般的な記述子が含まれていて /usr/share/terminfo/ に保存されます。

まずは汎用の値を試してください:

~/.screenrc
term screen-256color

上記で上手く行かない場合、使用しているターミナルにあわせて設定してみてください。例えば xterm ベースのターミナルを使っている場合:

~/.screenrc
term xterm-256color

rxvt-unicode を使用する場合:

~/.screenrc
term rxvt-unicode-256color
ノート: /usr/share/terminfo/r/rxvt-unicode-256colorrxvt-unicode-terminfo に入っています。このパッケージは rxvt-unicode の依存パッケージとしてインストールされます。ただし、SSH を介してサーバーにログインして screen を実行している場合、terminfo ファイルがサーバー側に存在しない可能性があります。その場合、サーバーに /usr/share/terminfo/r/rxvt-unicode-256color をコピーして ~/.terminfo に保存することを推奨します。

上記の設定が駄目ならば最後の手段として、termcapinfo を設定してください:

~/.screenrc
attrcolor b ".I"    # allow bold colors - necessary for some reason
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'   # tell screen how to set colors. AB = background, AF=foreground
defbce on    # use current bg color for erased chars

有益なステータスバー

デフォルトのステータスバーは情報が少なすぎます。以下のように設定すると良いでしょう:

~/.screenrc
hardstatus off
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W} %c %{g}]'

あるいは、frodfrog のブログ に書かれている例:

~/.screenrc
hardstatus alwayslastline '%{= G}[ %{G}%H %{g}][%= %{= w}%?%-Lw%?%{= R}%n*%f %t%?%{= R}(%u)%?%{= w}%+Lw%?%= %{= g}][ %{y}Load: %l %{g}][%{B}%Y-%m-%d %{W}%c:%s %{g}]'

ウェルカムメッセージをオフにする

~/.screenrc
startup_message off

hardstatus 行を urxvt|xterm|aterm のウィンドウタイトルに動的に変える

This one is pretty simple; just switch your current hardstatus line into a caption line with notification, and edit accordingly:

~/.screenrc
backtick 1 5 5 true
termcapinfo rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;\007'
hardstatus string "screen (%n: %t)"
caption string "%{= kw}%Y-%m-%d;%c %{= kw}%-Lw%{= kG}%{+b}[%n %t]%{-b}%{= kw}%+Lw%1`"
caption always

This will give you something like screen (0 bash) in the title of your terminal emulator. The caption supplies the date, current time, and colorizes your screen window collection.

X のスクロール機能を使う

GNU Screen のスクロールバッファは ctrl+a [ で読むことができますが、不便です。xterm や konsole などのスクロールバーを使うには、以下の行を追加してください:

~/.screenrc
termcapinfo xterm* ti@:te@

動作中のプログラムを screen にアタッチ

screen の外で起動したプログラムを中に持って行きたい場合、reptyr を使うことでプロセスの親を tty から screen に変えることができます。

公式リポジトリから reptyr パッケージをインストールしてください。

プロセスの PID を取得してください (ps ax を使えば取得できます)。reptyr の引数として取得した PID を入力して screen ウィンドウの中で実行してください:

$ reptyr <pid>

screen で別の bash プロンプトを設定

screen セッションで別の bash プロンプトを使いたい場合、以下を .bashrc に追加してください [1]:

if [ -z $STY ]
then
        PS1="YOUR REGULAR PROMPT"
else  
        PS1="YOUR SCREEN PROMPT"
fi

ビジュアルベルを切る

以下の設定を使えば、screen はベル音声の代わりに画面の点滅を使うのを止めます。

~/.screenrc
vbell off

トラブルシューティング

screen で起動した時に Midnight Commander がフリーズするのを修正

In some cases (need deeper inspection) old gpm bug gets alive. So, then you try to run mc inside screen, you get a frozen screen window. Try to kill gpm daemon before starting mc and/or disable it in /etc/rc.conf.

エディタのテキストが残るのを修正

nano などのテキストエディタを開いて閉じると、テキストがターミナルに残ってしまうことがあります。これを修正するには、以下を記述してください:

~/.screenrc
altscreen on

ウィンドウリストの Name カラムに "bash" としか表示されない

~/.screenrc に以下を追加してください:

~/.screenrc
windowlist string "%4n %h%=%f"

参照