画面付きのラズベリーパイがあります。ログインプロンプトで始まります。キーボードとマウスが接続されておらず、そのままにしたいです。ネットワークからsshを介してログインし続けますが、sshを介して入力したコマンドとその出力を追加画面で表示したいと思います。可能ですか?
答え1
入力と出力のリダイレクトに関連するより「直接的な」解決策があるかどうかはわかりませんが、画面。アイデアは、すべてのタスクを1つのセッションで実行screen
し、そのセッションに2回接続することです。 1回は動作しているSSH端末で、1回は接続されているディスプレイから接続します。
まず、接続されているモニターの端末名を知る必要があります。テストするrPIはありませんが、直接接続された画面が通常のLinuxビデオコンソールにマップされていると仮定するので、おそらく/dev/tty1
。
screen
インストールされていることを確認してください- SSHを使用したログイン
新しい画面セッションの作成
screen
別の端末から同じスクリーンセッションに接続します。
これが機能する方法は、ローカルキーボードを使用してログインして入力することです
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'
走ったばかり(オリジナル)X
vt2に切り替えたら、私の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
ものバラより他のデバイスに出力がある場合は、通常そのデバイスに書き込むだけです。