ホスト間で/ devの下のデバイスを共有できますか?

ホスト間で/ devの下のデバイスを共有できますか?

状況はこんな感じです。/dev/video0仮想マシン内からアクセスしたいVMwareサーバーにビデオデバイスがあります。ただし、何らかの理由でデバイスを仮想マシンに直接接続できないため、ホストマシンに接続する必要があります。

Unixの哲学では、すべてが実際にはファイルにすぎないため、/devNFS、Samba、sshfs、または他のプロトコルを使用して2つのホスト間でデバイスを共有し、1台のサーバー上のLinuxがデバイスにアクセスできるようにすることができます。

答え1

いいえ。

NFS またはその他のネットワークファイルシステムからデバイスファイルをエクスポートできます。ただし、デバイスファイルの意味は、そのファイルを開くコンピュータによって異なります。 NFSを介してサーバーシステムからクライアントシステムにエクスポートすると、クライアント/dev/video0システムは「文字デバイス81:0」のみを表示し、それを独自のビデオキャプチャデバイスとして解釈します。クライアントシステムには、サーバーと同じデバイス番号を割り当てる必要もありません。たとえば、OpenBSD クライアントは次のように表示できます。擬似端末ドライバこれは、OpenBSDでchar 81:0を意味するからです。

あなたが求めるのは良いでしょうが、難しいでしょう。クライアントからのすべての要求はサーバーに転送する必要があり、その逆も同様です。個々のドライバーは特定の支援を受ける必要があります。たとえば、一部のドライバはプロセスとカーネル間の共有メモリに依存しており、ネットワーク全体で透過的にサポートするのは困難で費用がかかります。ビデオキャプチャドライバが実際に共有メモリを使用しているかどうかはわかりませんが、大量のデータを非同期的に転送できることを考慮すると、それが予想されます。

Linuxにはいくつかの特定のサポートがあります。ネットワークブロックデバイス。これらはネットワークファイルシステムに依存しません。デバイスファイルはクライアントにのみ存在し、サーバーのデーモンは実際のブロックデバイスをエミュレートします。実際の物理デバイスとタスクを中継できますが、通常はインポートとインポートを読みます。イメージファイルの作成)。

ビデオキャプチャに関連するソリューションを見つける必要があります。物理デバイスが接続されているコンピュータでデータ集約的な部分をできるだけ実行してみてください。または、VM内で物理デバイスへの直接アクセスをサポートするVMソリューションを見つけます(ホスト/ゲストソリューションがそれをサポートしているかどうかはわかりません。ハイパーバイザーベースのソリューションがそれをサポートする可能性が高い)。

答え2

Gillesの答えに加えて、ファイルをioctlする意図がない限り、これは単なるストリームです。だからゲストから逃げたら

# mkfifo /dev/fakevideo0
# ssh host cat /dev/video0 > /dev/fakevideo0

/dev/fakevideo0 はバッファとして機能するので、ここで読むとカメラからストリームを取得できます。

答え3

これはOPの質問に対する答えではありませんが、neteventというツールがあります。https://github.com/Blub/netevent/dev/input/event*これにより、システム間に位置するioctlデバイスを共有できます。私はそれを自分で試してみました、それは私にとって効果的でした。

関連情報