运行ps -ef
发现upstart的进程号是1566,当我的gui程序的父进程id为1566的时候,是可以正常显示的,现在出现下面几个问题导致我的gui程序无法正常运行。
我有一个 systemd 程序,它的名字是 terui。我想在 terui 中启动我的 gui 程序。这是我的启动代码:
system("su sunxy -c 'DISPLAY=:0 XAUTHORITY=/home/sunxy/.Xauthority /etc/opt/kpki/mw/KCliBaseService/start_tray.sh'");
我发现这样启动后gui程序的父进程id是1,而不是1566,导致我的gui程序无法正常显示,当我输入
su sunxy -c'DISPLAY=:0 XAUTHORITY=/home/sunxy/.Xauthority /etc/opt/kpki/mw/KCliBaseService/start_tray.sh'
在bash中以root用户身份,我的gui程序可以正常显示,其父进程id是1566。
这是我的terui.service:
[Unit] Description=terui Daemon Requires=network-online.target After=network-online.target [Service] Environment="DISPLAY=:0" Environment="XAUTHORITY=/home/sunxy/.Xauthority" ExecStart=/home/testui/build/terui User=root Type=simple Restart=always RestartSec=3s [Install] WantedBy=graphical.target
所以,我的问题是,我该怎么做才能正常显示 GUI 程序?
答案1
因此,当程序以用户启动时,您需要更改用户,并且相同的用户权限将应用于 GUI 程序。
根据 systemctl 的手册页用户参数也可以根据用例进行更改。并且还可以改变服务的所有权,因此密码警告将被禁用。
前
[Service]
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/sunxy/.Xauthority"
ExecStart=/home/testui/build/terui
User=root
Type=simple
Restart=always
RestartSec=3s
[Install]
WantedBy=graphical.target
后
[Service]
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/sunxy/.Xauthority"
ExecStart=/home/testui/build/terui
User=USERNAME
Type=simple
Restart=always
RestartSec=3s
[Install]
WantedBy=graphical.target