Debian
在同一台機器上跨 X-desktop 會話進行通信?
我有一個執行 Debian/Raspbian(因此是 X 伺服器)的 Raspberry Pi,我想用它來驅動兩個螢幕。我正在編寫一些具有面向公眾的螢幕和麵向操作員的螢幕的東西。舉一個我正在嘗試做的事情的例子,假設操作員將有一個 GUI,他或她可以在其中按“貓”,然後全屏貓將出現在另一台顯示器上。
問題是 Pi 只有一個 HDMI 輸出,因此很難驅動兩台顯示器,除非您使用第二台電腦(例如筆記型電腦)進行 SSH/遠端桌面會話。現在,我之前在 headless Pis 上完成了遠端桌面,難度很小。現在困擾我的問題是,當我進入遠端桌面時,我得到了一個完全獨立的第二個桌面,而不是驅動主顯示器的那個,因此我無法訪問該顯示器。如何做到這一點,以便當我遠端進入時,我可以控制該顯示器,還可以控制僅在遠端電腦上執行的 GUI 的螢幕區域?另外,我該如何做到這一點,當程序啟動時,面向公眾的顯示器會全屏顯示,而操作員 gui 會彈出另一個?
我想盡可能多地保留在 Pi 上,以便遠端電腦的唯一要求是它可以執行遠端桌面。換句話說,我不想將我的軟體分為遠端和本地執行檔。
你基本上有兩個問題:
- 如何在不同的顯示器上啟動程序?
- 一旦該程序啟動,我該如何與它交談?
(您沒有指定首選語言,所以我假設是 python。)
#1 很簡單。為您的腳本製作一個包裝器,然後呼叫它
startclient.sh
#!/bin/bash DISPLAY=":0.0" ./client.py
(我假設面向公眾的螢幕是 HDMI 螢幕。)
#2有點棘手。我會讓公眾使用Pyro監聽命令。
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。請注意,我沒有測試過這段程式碼。