提问人:Matthias 提问时间:11/17/2023 更新时间:11/17/2023 访问量:14
通过 Raspberry Pi OS buster 上的 python 脚本启动 VNC-Viewer
Start VNC-Viewer via python script on raspberry pi os buster
问:
我完全是 python/linux 初学者,并且通过 pythonscript 在 raspberry pi 上使用 buster 启动 vncviewer 而苦苦挣扎......
我做了一个配置脚本,所以 1 张图像可以放在大约 20 个地方。这部分效果很好。 现在我们遇到了无法重新连接 vnc 查看器的问题,完全重启后一切正常...... 因此,我认为创建一个 pythonscript 来监视 vncviewer 并在需要时仅重新启动查看器将是一个很好的做法。
# Importieren der benötigten Module
import time
import subprocess
import socket
#aus IPAdresse zu PCnamen finden
def get_ip_address(hostname):
try:
ip = socket.gethostbyname(hostname)
#print(ip)
return (ip)
except socket.error as e:
print (str(e))
#VNC Server aus der Datei lesen die vom Configskript mit entsprechenden Daten gefüllt wird
def read_vnc_server():
with open('/home/pi/vncremote.vnc', 'r', encoding='ISO-8859-1') as file:
lines = file.readlines()
second_line = lines[1].strip()
#print(second_line)
hostname = second_line[5:]
#print(second_line)
return (hostname)
# netstat Verbindungen nach erwartetem Servernamen filtern, wenn gefunden dann verbunden und return true
def test_connection(vnc_server):
ps = subprocess.run(['netstat', '-an'], check=True, capture_output=True)
vnccon = subprocess.run(['grep', '-e', vnc_server], input=ps.stdout, capture_output=True)
#print(vnccon.returncode)
return vnccon.returncode == 0
while True:
hostname = read_vnc_server()
#print(hostname)
ip = get_ip_address(hostname)
#print(ip)
ip = ip + ':5900'
#print(ip)
#print(test_connection(ip))
if not test_connection(ip):
subprocess.Popen(["/usr/bin/vncviewer", "-config", "/home/pi/vncremote.vnc"])
# Warten für das definierte Zeitintervall
time.sleep(10)
如果我在树莓派操作系统中使用 geany 运行该脚本,一切正常,但将其作为服务启动总是以“无法打开显示”结束
所以我认为这行是问题所在:subprocess.Popen(["/usr/bin/vncviewer", "-config", "/home/pi/vncremote.vnc"])
我在那行中尝试了一些display:=0参数,但不知道为什么......
xhost +localhost
没有任何效果
从 shell/service 开始应该是一个问题,当在 raspberry pi os 中启动时,一切正常。 但无法弄清楚问题所在。
你能帮忙吗?
答: 暂无答案
评论