ユーザーごとに 1 つのスクリーン セッションを作成し、それをログイン シェルとして設定するにはどうすればよいですか?

ユーザーごとに 1 つのスクリーン セッションを作成し、それをログイン シェルとして設定するにはどうすればよいですか?

CLI インターフェースを使用してユーザーがログインするたびに screen が自動的に実行されるように設定するにはどうすればよいですか? そのユーザーに対して既に screen セッションが実行されている場合は、新しいログインをその screen セッションに接続したいと思います。 screen セッションに接続すると、新しいログインごとに新しいウィンドウが作成されると非常に便利です。

答え1

まず、これを実行するユーザーに対して、~/.screenrc次の行があることを確認します。

shell /bin/bash

(またはユーザーが現在使用している他のシェル)。この設定をせずにシェルを変更すると、ユーザーはログインできなくなります。次の行で画面の起動メッセージを消すことも検討してください。

startup_message off

さて、実行中のスクリーンセッションが終了し、まだ実行中のものがなければ、そのセッションを開始する実行可能なスクリプトを作成しましょう。ターミナルで実行します。

sudo nano /bin/screenlogin.sh

次の2行を入力します。

#!/bin/bash
screen -x -r || screen

を押しCtrl xyファイルを保存します。実行

sudo chmod 755 /bin/screenlogin.sh

最後に、chshターゲット ユーザーで実行し、/bin/screenlogin.sh要求されたらシェルを入力します。

答え2

実行はscreen -xR、基本的に の実行と同じ動作になりますscreen -xr || screen

問題は、私が知る限り、ログイン シェルにフラグを渡すことができないことです。また、ログイン シェルとして screen などのシェル以外のものを使用すると、SFTP などが機能しなくなる可能性があります。

そこで、ログイン シェルとして bash を設定します。次に、.bashrc (bash を起動したときに実行されるファイル) の末尾に screen を実行するコードを追加します。すると、screen は .bashrc で指定されたシェルを実行します.screenrc

このコマンドは、特別な条件下でのみ実行されるようにします。つまり、現在実行中のコピー bash が別のコピー bash によって (間接的にでも) 起動されていない場合のみです。これにより、ユーザーがシェルとして bash を使用し、screen がその中で bash を起動した場合、コンピューターのメモリが不足するまで、screen の中で bash の中で screen の中で bash の中で bash が爆発するという現象は発生しなくなります。

まず、 を実行してシェルを /bin/bash に変更し、chshパスワードを入力してから、 と入力して/bin/bashEnter キーを押します。

次に、ホーム フォルダー内の隠し.bashrcファイルを編集し、末尾に次のコードを追加します。

if [ ${SHLVL} -eq 1 ]; then
    ((SHLVL+=1)); export SHLVL
    exec screen -xR
fi

.screenrc次に、ホーム フォルダー内の隠しファイルを編集します (存在しない場合は作成します) 。次の設定を追加または編集します。

shell /bin/zsh
startup_message off

(もちろん、Zsh 以外のシェルが必要な場合は、代わりにそれをインストールしてください。bash でも動作するはずです。)

関連情報