在同一台计算机上跨 X 桌面会话进行通信?

在同一台计算机上跨 X 桌面会话进行通信?

我有一个运行 Debian/Raspbian(即 X 服务器)的 Raspberry Pi,我想用它来驱动两个屏幕。我正在编写一个具有面向公众的屏幕和面向操作员的屏幕的东西。举一个我正在尝试做的事情的例子,假设操作员将有一个 GUI,他或她可以在其中按“猫”,然后全屏猫将出现在另一个监视器上。

问题是 Pi 只有一个 HDMI 输出,这使得驱动两台显示器变得困难,除非您使用第二台计算机(例如笔记本电脑)进行 SSH/远程桌面会话。现在,我之前已经在无头 Pi 上完成了远程桌面,几乎没有什么困难。现在困扰我的问题是,当我远程桌面进入时,我得到了一个完全独立的第二个桌面,而不是驱动主显示器的桌面,因此我无法访问显示器。如何做到这一点,以便当我远程登录时,我不仅可以控制该显示器,而且还可以控制仅在远程计算机上运行的 GUI 的屏幕区域?另外,当程序启动时,如何才能使面向公众的显示屏全屏显示,并在另一个显示屏上弹出操作员图形用户界面?

我想在 Pi 上保留尽可能多的内容,以便远程计算机的唯一要求是它可以进行远程桌面。换句话说,我不想将我的软件分为远程和本地可执行文件。

答案1

你本质上有两个问题:

  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。请注意,我还没有测试过这段代码。

相关内容