他の端末でコマンドを表示するには?

他の端末でコマンドを表示するには?

画面付きのラズベリーパイがあります。ログインプロンプトで始まります。キーボードとマウスが接続されておらず、そのままにしたいです。ネットワークからsshを介してログインし続けますが、sshを介して入力したコマンドとその出力を追加画面で表示したいと思います。可能ですか?

答え1

入力と出力のリダイレクトに関連するより「直接的な」解決策があるかどうかはわかりませんが、画面。アイデアは、すべてのタスクを1つのセッションで実行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それが何であるかがわかります。tty

答え2

興味深いことに、私もCeladaの解決策を考えたりscreen -x好きtmux attachだったがinit(/etc/inittabまたは/etc/initまたは/etc/systemd)または家庭教師起動時に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セッションから切り離すことができます。

Screenセッションはrootとして実行されるため、接続にはroot権限が必要です。 screenのマルチユーザーモードを有効にしたいかもしれませんが、setuidが必要なので、/usr/bin/screenいくつかのセキュリティ問題が発生します。探す画面マニュアルもっと学ぶ。

答え3

xtermインストールされている場合は、ターミナルUTF-8アプリケーションがpi含まれている必要がありますluit。これは、UTF-8をサポートしていない他のタイプの端末アプリケーションを翻訳するためによく使用される小さなプログラムです。luit擬似端末を割り当てることで動作します。ほぼ同じ方法screenですが、オーバーヘッドははるかに少ないです。

luit簡単にできることの1つは、入力をコピーすることです。(または出力 - 異なる場合があります)指定されたファイルに到達したとき。luitしかし、(ターミナルで所有者) 入力するすべての端末セッションの出力を示します。(自己stty echo出力を含めることもできます)そして出力これは、端末セッションのすべての出力が処理された後にすべてが端末装置に書き込まれることを意味します。コピー中もこれが行われます。それ標準入力(ターミナルから出る必要があります。つまり、キーボードを意味します。)シェルなどのラップされたプログラムへの入力。私も知っています - pty i / oは少し奇妙かもしれませんが、重要なのは、端末セッションの出力をリアルタイムで複数のディスプレイデバイスにコピーする便利な方法を提供できることです。

たとえば、

ssh me@machine -t 'luit -olog /dev/tty2 sh'

走ったばかり(オリジナル)Xvt2に切り替えたら、私のAndroidタブレット端末で上記のコマンドを実行します。Ctrl+Alt+F2デスクトップコンピュータに新しいプロンプトが表示されますlogin。 Android端末で一般的な方法でパスワードの入力を求め、タブレットのシェルに移動します。そして私のタブレット端末にすべてを書いてください(プロンプト、マイ入力cat fileなど)私のデスクトップ画面にも表示されます。私が入力するすべてのキー(あるいは触ったり何でも)タブレットのコンテンツはデスクトップvt2にすぐに反映されます。

tty散乱プロセスが機能している場合、これが機能するには(通常agettyまたは類似)ユーザーアカウントがデフォルトで満たしていない特定の権限レベルを持つエンドデバイスを作成した場合は、それを変更する必要があります。次のように簡単にできます。

chown me /dev/tty[num]

… …あなたが望むなら。私のシステムでは、私のユーザーアカウントはこのグループのメンバーであるため、ttyこれは問題ではありません。私はほとんどのLinuxディストリビューションでユーザーアカウントをttyグループに入れるだけで十分だと思います。

ls -l /dev/tty2
crw--w---- 1 root tty 4, 2 Jun 14 05:14 /dev/tty2 

...ご覧のとおり、ルートが所有しているがグループに割り当てられているデバイスファイルです tty

とにかく上記のluitコマンドを実行する必要があるかもしれません。より複雑でおそらく理想的な解決策があるかもしれませんが、screen欲しいtmuxものバラより他のデバイスに出力がある場合は、通常そのデバイスに書き込むだけです。

関連情報