背景
我设计了一个带UI界面的QT程序,用于和串口设备/dev/ttyTHS1进行通信。
目前程序有两点要去:
1、设置程序开机自启动;
2、启动时赋予程序root权限(因为操作/dev/ttyTHS1需要root权限)。
方案
目前我总结了两种方案可以实现,但还是想请教一下各位开发人员,你们是否有更好的设计方案。
方案一:编写desktop方式
编写qt-ui.desktop文件实现开机自启动
文件内容如下:
[Desktop Entry]
Version=1.0
Name=pm_client
Exec=sudo /home/rk/power_management_client
StartupNotify=false
NoDisplay=true
Type=Application
Categories=System;Utility;Archiving;
将desktop放到:/etc/xdg/autostart目录下;
执行指令:sudo visudo
在打开文件的最后添加以下内容:
rk ALL=(ALL) NOPASSWD: /home/rk/power_management_client
通过desktop文件实现qt程序开机自启动,通过追加内容实现免密码登录。
方案二:service服务方式
服务内容如下:
[Unit]
Description=Qt GUI demo via systemd
After=graphical.target
[Service]
Type=simple
# 关键:把 X11 环境带进来
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/run/user/1000/gdm/Xauthority"
# 1000 是你平时登录用户的 UID,可用 id -u 看;GDM3 的 cookie 放在这里。
#ExecStartPre=/bin/sleep 3
ExecStart=/home/rk/power_management_client
Restart=on-failure
[Install]
WantedBy=graphical.target
将service放到:/lib/systemd/system/目录下。
sudo systemctl daemon-reload
sudo systemctl enable qt-ui.service
该方法也可以完成目标。
总结
我目前可以通过以上两种方案实现开机以root权限启动qt程序。看到本文章的朋友是或否还存在更好的方案,欢迎分享。
3640

被折叠的 条评论
为什么被折叠?



