screenコマンドをログインシェルにする方法を以下に記します。
後述されていますが、screenコマンドの便利な機能をログインシェルとして使用する設定方法などを記しています。
尚、本記事作成時点では、Ubuntu12.04環境では正常に設定できましたが、CentOS6では意図した動作をしませんでした。
screenコマンドは仮想端末を作成・管理するコマンドです。
screenコマンドを利用すれば、xtermやTeraTermなど端末プログラムを1つだけ開いている中で、
いくつも仮想端末を開けたり、仮想端末間でのデータのコピー・ペースト、端末の状態を保持したまま
ログアウトすることなどが可能となります。
screenコマンドの利用例としては、遠隔地にあるサーバ上で完了まで長時間かかるプログラムを実行する場合などがあります。
数時間、数日かかるプログラムが完了するまで、
遠隔サーバへの接続を(接続に使っているsshや端末プログラム、手元のマシンへの通電ごと)
ずっと保持し続ければならないのでしょうか?
この場合、sshで遠隔サーバにログインした先でscreenコマンドを実行して、
screen環境の中でそのプログラムを実行します。
そうすればプログラムが終了するまで、端末プログラムやsshのセッションを保持し続ける必要はありません。
遠隔地サーバ上で起動したscreen環境を「切り離し」(detachするといいます)、
(翌朝もしくは数日後)プログラムの実行が完了したころに「再接続」(attachするといいます)すればいいのです。
その間手元のマシンの電源は落としておけます。
screen環境を利用するのは、コマンドラインから"screen"コマンドを実行するだけです
% screen
screenは非常に機能が豊富なので、screenの利用法自体はここでは触れません。
このscreenコマンドはUbuntu12.04環境においてはログインシェルとしても登録されています。
つまり、/etc/shells に /bin/bash, /bin/tcsh, /bin/zshなどのシェルプログラムと同様に、/usr/bin/screen が登録されているのです。
% cat /etc/shells # /etc/shells: valid login shells /bin/csh /bin/sh /usr/bin/ksh /bin/ksh /usr/bin/rc /usr/bin/tcsh /bin/tcsh /bin/bash /bin/rbash /usr/bin/screen /bin/zsh /usr/bin/zsh
以下のようにchshコマンドを実行すれば、screenをログインシェルに変更できます。
% chsh -s /usr/bin/screen パスワード: (パスワードを入力する) %
screenをログインシェルにしたユーザのpasswdエントリは以下のようになります。
% cat /etc/passwd | grep user0 user0:x:1000:1000:,,,:/home/user0:/usr/bin/screen %
ログインシェルとしてscreenを登録した場合、そのユーザでログインするといきなりscreenの環境が利用可能となります。
その場合、対話用に起動されるシェルプログラムは/bin/shになっています。
これはscreenコマンドが新しい仮想端末のセッションで起動する対話用シェルのデフォルト値(環境変数SHELLがなかった場合に、screenコマンドが起動するプログラム)です。
これを普段使っているシェルに変更するには、screenの設定ファイル~/.screenrcの設定句shellで設定します。
以下の例ではbashを指定しています。
% cat ~/.screenrc shell /bin/bash
screenをログインシェルとした場合、detach操作
(仮想端末環境の切り離し。端末の状態や実行しているプログラムはバックグラウンドで動作し続ける)
をすると強制的にログアウトします。再度ログインした場合には、
自動的にattach(仮想端末環境への再接続。detachした環境に戻る)します。
なお、CentOS6の環境でも同様に/usr/bin/screenを/etc/shellsに登録し、
ログインシェルに変更を試みましたが、こちらはうまく設定できませんでした
(chshで変更できず、/etc/passwdを直接変更してもログイン不可となりました)。
以上、仮想端末環境作成・管理コマンドのscreenをログインシェルとする方法についてでした。