Comunica através de sessões de X-desktop na mesma máquina?

4

Eu tenho um Raspberry Pi rodando Debian / Raspbian (portanto, um servidor X) com o qual eu gostaria de usar duas telas. Estou programando algo que terá uma tela voltada para o público e uma tela voltada para o operador. Para dar um exemplo das coisas que estou tentando fazer, digamos que o operador terá uma GUI onde ele ou ela pode pressionar 'cat' e um gato em tela cheia aparecerá no outro monitor.

O problema é que o Pi tem apenas uma saída HDMI, dificultando a condução de dois monitores, a menos que você recorra a SSH / sessões de área de trabalho remotas com um segundo computador (por exemplo, um laptop). Agora, eu fiz o desktop remoto em Pis sem cabeça antes com muito pouca dificuldade. A questão que está me incomodando agora é que, quando eu trabalho na área de trabalho remota, eu obtenho uma segunda área de trabalho completamente independente do que a que está acionando o monitor principal, e o monitor fica inacessível para mim. Como faço para que quando eu me conecto remotamente, eu tenha controle sobre esse monitor, mas também a área da tela para uma GUI que só irá para o computador remoto? Além disso, como faço para fazê-lo quando o programa é iniciado, o monitor voltado para o público fica em tela cheia e o gui do operador aparece do outro?

Gostaria de manter o máximo possível no Pi para que o único requisito do computador remoto seja que ele possa fazer o desktop remoto. Em outras palavras, não quero dividir meu software em executáveis remotos e locais.

    
por BB ON 08.07.2013 / 20:54

1 resposta

2

Você tem basicamente dois problemas:

  1. Como inicio um programa em uma exibição diferente?
  2. Quando o programa é iniciado, como falo com ele?

(Você não especificou seu idioma preferido, então eu assumi python.)

# 1 é fácil. Crie um wrapper para o seu script e chame-o de startclient.sh

#!/bin/bash
DISPLAY=":0.0"
./client.py

(suponho que a tela voltada para o público seja a HDMI).

# 2 é um pouco mais complicado. Eu faria o público escutar os comandos usando o 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

O lado do operador:

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()

Isso requer PyQt4 e Pyro4. Note que eu não testei este código.

    
por 09.07.2013 / 02:01