web-dev-qa-db-ja.com

別の端末でコマンドを表示するにはどうすればよいですか?

スクリーンが取り付けられたRaspberryPiがあります。ログインプロンプトが表示されます。キーボードもマウスも接続されていないので、そのままにしておきたいと思います。ネットワークからssh経由でログインしますが、ssh経由で入力したコマンドとその出力を添付画面で確認したいと思います。これは可能でしょうか?

5
Euphorbium

入力と出力のリダイレクトのみを含む、より「直接的な」ソリューションがあるかどうかはわかりませんが、 screen を使用してこのようなものを作成することができました。アイデアは、screenセッション内ですべての作業を行い、セッションに2回接続することです。1回は作業中のSSHターミナルから、もう1回は接続されたディスプレイからです。

まず、付属のディスプレイの端末名を知っておく必要があります。テストするrPIはありませんが、直接接続された画面は通常のLinuxビデオコンソールにマップされると想定しているため、おそらく/dev/tty1になります。

  1. screenがインストールされていることを確認してください
  2. SSHでログインする
  3. 新しいスクリーンセッションを作成する

    screen
    
  4. 他の端末から同じ画面セッションに接続します。

    この機能の使用目的は、ローカルキーボードを使用してログインし、screen -r -x-r再開セッションおよび-x既存セッションへのマルチアタッチの場合)と入力することです。この場合、セッションに接続する端末に実際にログインしていません。そのため、目的の端末への入力と出力を、接続元の端末である「納得」画面にリダイレクトします。それはハックですが、私にとってはうまくいきました。

    screen -r -x </dev/tty1 >/dev/tty1 2>&1 & disown
    

RPIのビデオコンソールの端末の名前が/dev/tty1ではなく他の名前である場合は、キーボードを1回だけ接続し、ローカルでログインしてttyと入力することでそれが何であるかを知ることができます。促す。

3
Celada

興味深いことに、私はscreen -xまたはtmux attachもCeladaのソリューションのように考えましたが、initを(/etc/inittabまたは/etc/initまたは/etc/systemdで)設定することをお勧めします。 supervisor 起動時にgetty-on-screenセッションを自動的に起動します。

スーパーバイザーの作業構成:

[program:screen]
command=bash -c 'chvt 9 && TERM=linux exec screen getty tty </dev/tty9 >/dev/tty9 2>&1'
autostart=true
autorestart=true

自動的に/dev/tty9に切り替わり、gettyを実行している画面を起動してログインプロンプトを表示します。他のsshセッションから、Sudo screen -xを実行してこのコンソールセッションに接続し、次のように入力できます。 Ctrl+AD セッションから切り離します。

画面セッションはrootによって実行されるため、画面セッションをアタッチするにはroot権限が必要です。画面のマルチユーザーモードを有効にすることもできますが、/usr/bin/screenにsetuidが必要であるため、セキュリティ上の問題が発生します。詳細については、 画面マニュアル を参照してください。

3
yaegashi