Debian

在同一台機器上跨 X-desktop 會話進行通信?

  • December 31, 2017

我有一個執行 Debian/Raspbian(因此是 X 伺服器)的 Raspberry Pi,我想用它來驅動兩個螢幕。我正在編寫一些具有面向公眾的螢幕和麵向操作員的螢幕的東西。舉一個我正在嘗試做的事情的例子,假設操作員將有一個 GUI,他或她可以在其中按“貓”,然後全屏貓將出現在另一台顯示器上。

問題是 Pi 只有一個 HDMI 輸出,因此很難驅動兩台顯示器,除非您使用第二台電腦(例如筆記型電腦)進行 SSH/遠端桌面會話。現在,我之前在 headless Pis 上完成了遠端桌面,難度很小。現在困擾我的問題是,當我進入遠端桌面時,我得到了一個完全獨立的第二個桌面,而不是驅動主顯示器的那個,因此我無法訪問該顯示器。如何做到這一點,以便當我遠端進入時,我可以控制該顯示器,還可以控制僅在遠端電腦上執行的 GUI 的螢幕區域?另外,我該如何做到這一點,當程序啟動時,面向公眾的顯示器會全屏顯示,而操作員 gui 會彈出另一個?

我想盡可能多地保留在 Pi 上,以便遠端電腦的唯一要求是它可以執行遠端桌面。換句話說,我不想將我的軟體分為遠端和本地執行檔。

你基本上有兩個問題:

  1. 如何在不同的顯示器上啟動程序?
  2. 一旦該程序啟動,我該如何與它交談?

(您沒有指定首選語言,所以我假設是 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。請注意,我沒有測試過這段程式碼。

引用自:https://unix.stackexchange.com/questions/82240