
Debian / Raspbian(Xサーバーなど)を実行しているRaspberry Piがあり、それを使用して2つの画面を駆動したいと思います。私は公開用画面とオペレータ用画面のある文を書いています。私がしたいことの例を挙げるために、オペレータが「猫」を押すことができるGUIがあり、フルスクリーンの猫が別のモニタに表示されるとしましょう。
問題は、PiにはHDMI出力が1つしかないため、SSH /リモートデスクトップセッションに2台目のコンピュータ(ラップトップなど)を使用しない限り、2台のモニタを駆動することは困難です。今、私は以前はヘッドレスPiでほとんど難なくリモートデスクトップを実行していました。今私を悩ませる問題は、リモートデスクトップを使用するときにプライマリモニタを駆動するデスクトップの代わりに、完全に別の2番目のデスクトップを取得するため、モニタにアクセスできないことです。リモートでログインするときに、そのモニタだけでなく、リモートマシンでのみ実行されるGUIの画面領域も制御できるようにするにはどうすればよいですか。また、パブリックディスプレイをフルスクリーンに切り替え、プログラムの起動時にオペレータGUIが別のディスプレイにポップアップするようにするにはどうすればよいですか?
私はリモートコンピュータの唯一の要件がリモートデスクトップを実行できるように、Piにできるだけ多くを維持したいと思います。つまり、私のソフトウェアをリモート実行可能ファイルとローカル実行可能ファイルに分割したくありません。
答え1
本質的に2つの質問があります。
- 他のモニターでプログラムを実行するにはどうすればよいですか?
- プログラムの開始後、どのようにプログラムと会話するのですか?
(優先言語を指定していないので、Pythonを使用しているとします。)
#1は簡単です。スクリプトのラッパーを作成して呼び出します。startclient.sh
#!/bin/bash
DISPLAY=":0.0"
./client.py
(公開画面はHDMI画面であるとします。)
#2は少しトリッキーです。私は公開側に次のようにコマンドを聞くようにします。パイロ。
from PyQt4 import QtGui
import Pyro4
daemon=Pyro4.Daemon() # make a Pyro daemon
uri=daemon.register(QtGui)
print "Ready. Object uri =", uri # print the uri so we can use it in the client later
daemon.requestLoop() # start the event loop of the server to wait for calls
オペレータ側:
import Pyro4
import sys
uri=raw_input("What is the Pyro uri of the gui object? ").strip()
QtGui=Pyro4.Proxy(uri)
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('Simple')
w.show()
これにはPyQt4とPyro4が必要です。このコードはテストしていません。