Mic*_*hal 7 python ssh xserver pyqt4
我正在编写一个使用PyQt4进行GUI的linux应用程序,它只在远程会话期间使用
(ssh -XY/vnc).
因此,有时可能会发生用户忘记使用X转发参数运行ssh或者由于某种原因X转发将无法使用的情况.在这种情况下,应用程序崩溃严重(不幸的是我强行使用包装到python中的旧C++库,如果应用程序崩溃,它会完全混淆用户的当前会话).
我不能使用其他东西所以我的想法是在加载该库之前检查X转发是否可用.但是我不知道该怎么做.
我通常使用xclock检查我的会话是否启用了X转发,但使用xclock听起来像一个大的解决方法.
添加
如果可能,我想使用另一种方法,而不是创建一个空的PyQt窗口并捕获异常.
检查$DISPLAY是否设置了环境变量 - 如果它们没有使用ssh -X,它将为空(而不是包含类似的东西localhost:10).
如前所述,您可以检查DISPLAY环境变量:
>>> os.environ['DISPLAY']
'localhost:10.0'
Run Code Online (Sandbox Code Playgroud)
如果您如此倾向,您实际上可以连接到显示端口以查看sshd正在监听它:
import os
import socket
def tcp_connect_to_display():
# get the display from the environment
display_env = os.environ['DISPLAY']
# parse the display string
display_host, display_num = display_env.split(':')
display_num_major, display_num_minor = display_num.split('.')
# calculate the port number
display_port = 6000 + int(display_num_major)
# attempt a TCP connection
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((display_host, display_port))
except socket.error:
return False
finally:
sock.close()
return True
Run Code Online (Sandbox Code Playgroud)
这依赖于使用端口6000 +显示编号的标准X配置.
| 归档时间: |
|
| 查看次数: |
4678 次 |
| 最近记录: |