在 systemd 中以非 root 身份启动 GUI 程序

在 systemd 中以非 root 身份启动 GUI 程序

运行ps -ef发现upstart的进程号是1566,当我的gui程序的父进程id为1566的时候,是可以正常显示的,现在出现下面几个问题导致我的gui程序无法正常运行。

  1. 我有一个 systemd 程序,它的名字是 terui。我想在 terui 中启动我的 gui 程序。这是我的启动代码:

    system("su sunxy -c 'DISPLAY=:0 XAUTHORITY=/home/sunxy/.Xauthority /etc/opt/kpki/mw/KCliBaseService/start_tray.sh'"); 
    
  2. 我发现这样启动后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。

  1. 这是我的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

相关内容