あるコンピュータがディレクトリ内のデバイスを別のコンピュータと共有し、別のコンピュータが/dev/
(ローカルの場合)そのデバイスと対話する方法はありますか? SSHトンネルのようなものですか?
たとえば、カメラ、Arduinoへのシリアル接続、さらにコンピュータの/dev/random
?
答え1
要するに、いいえ。デバイスノードと対話する方法は、実際のファイルで実行できるよりも「豊富」であり、リモートシステムのカーネルがローカルプロセスメモリにアクセスできない場合は不可能です。ネットワーク)。
使用したいものの多くは、特定の時点で不合理に高い帯域幅要件(例:生モードの高品質カメラ)、低レイテンシ要件(コンピュータ側で何が起こると予想されるUSBマスデバイス)を持っていることは言うまでもないありません。これは、時間内)またはネイティブデバイスレベルでネットワーク操作を無効にする他の機能的側面です。
このため、特定のデバイスクラスでは、デバイスの近くで実行する必要があるタスクとリモートで実行できるタスクを区別することができ、他の方法もあります。たとえば、プリンタはCUPSを使用してネットワーク経由で共有でき、サウンドはパイプライン、jackdまたは他のデーモン用のデバイス、VLCを使用するビデオデバイス、ファイルシステムを使用するストレージデバイス、またはNFS、CIFSなどを使用します。ブロックデバイス(例:Ceph)
シリアルポートは抽象化が簡単です。そのポートを持つコンピュータに設定し(主に開く、ボーレート設定)、最小限のネットワークデーモンを使用して読み書きします。
実際、産業オートメーションでは、ネットワークを介して何とかアドレス指定できるUARTポートを持つことが非常に一般的なパターンです。 Linuxでは、socat
プログラムも同様のことができます。
答え2
- ブロックデバイスの取り付け
いいえ、できませんssh
。サーバーにデバイスをインストールし、リモートの場所sshfs
をローカルの場所にマウントするために使用できます。
- インタラクティブ
ssh
はい、リモートコマンドを使用してデータを送受信できます。
ssh user@server 'cat /dev/random'
サーバーデバイスの出力を提供しますrandom
。データを送信するのと同じ方法:
ssh user@server 'cat - >/dev/null' <<<"Hello"
これは「地元のようですか?」しかし、計画によってはこれで十分かもしれません。