通过 Raspberry Pi OS buster 上的 python 脚本启动 VNC-Viewer

Start VNC-Viewer via python script on raspberry pi os buster

提问人:Matthias 提问时间:11/17/2023 更新时间:11/17/2023 访问量:14

问:

我完全是 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 中启动时,一切正常。 但无法弄清楚问题所在。

你能帮忙吗?

python 树莓派 3 vnc-viewer raspbian-buster

评论

0赞 Matthias 11/21/2023
我无法找到这个问题的解决方案,但我选择了另一种方式来获得我需要的东西。我将 VNC-Viewer 作为服务启动 /lib/systemd/system/,linux 能够监视并重新启动进程本身......

答: 暂无答案