研究了很久,尝试了如下方法,都不能行
在~/.config/autostart 下加入 desktop脚本
现象:确实能开机自启动带界面的程序,但不是root权限的,是当前用户的权限
在init.d路径下放置脚本,并且ln -s 设置软链接到 rc5.d 下面
现象:能开机自启动不带界面的程序,无法开机自启动带界面的程序,因为那个时候界面渲染的程序还没起来吧。
在init.d路径下放置脚本,并且ln -s 设置软链接到 rc5.d 下面启动一个不带界面的守护进程,在守护进程里sleep几秒之后启动qt进程
现象:守护进程起来了,并且是root权限的,但是qt进程未启动。
在/etc/profile脚本的最后一行加入启动带界面程序的逻辑
现象:程序是启动了,但是卡住了ubunut自带的界面,且不是root权限的
通过 xxx.service服务的方式
我手动通过systemctl start xxx.service,无法启动程序,然后查看报错原因如下
.service 里面的 execstart 里就是通过绝对路径去执行了程序,我手动执行 execstart下的命令是可以启动程序。但是通过systemctl start 就报如下错误
7月 15 16:05:58 geust-virtual-machine systemd[1]: Starting kyrin system check server...
7月 15 16:05:58 geust-virtual-machine kyrinSystemCheckClient[2643]: QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
7月 15 16:05:58 geust-virtual-machine kyrinSystemCheckClient[2643]: qt.qpa.screen: QXcbConnection: Could not connect to display
7月 15 16:05:58 geust-virtual-machine kyrinSystemCheckClient[2643]: Could not connect to any X display.
7月 15 16:05:58 geust-virtual-machine systemd[1]: kyrinSystemCheck-server.service: Control process exited, code=exited status=1
7月 15 16:05:58 geust-virtual-machine systemd[1]: kyrinSystemCheck-server.service: Failed with result 'exit-code'.
7月 15 16:05:58 geust-virtual-machine systemd[1]: Failed to start kyrin system check server.
我感觉现在的方向是如下两个
系统提供了用户层面的路径 ~/.config/autostart,不知道是否有root权限的路径可以提供直接以root权限启动带界面的程序
我知道有个 /etc/xdg/autostart的路径, 我把我的desktop脚本放进去之后,发现程序并没有启动,不知道是否和我登录的用户不是root有关系
可以通过rc.rc5.d/ 下放置脚本实现root开机自启动不带界面的程序,是否有方法可以不带界面的程序中想办法延迟启动我们的qt程序。
目前我就是sleep了30秒,然后发现qt程序起不来.
将要运行的脚本添加到/etc/rc.local,此方法最为简单,只需要将要运行的脚本添加到rc.local中,注意需要在exit 0之前。
使用gnome-session-properties添加开机自启动程序
1、alt+F2,输入gnome-session-properties
2、在command栏里输入我们要添加的程序:
gnome-terminal -x bash -c "/home/wy/work/watch_dog/start_watchdog.sh"
或者去掉后面 -x bash -c …等内容,直接使用 gnome-terminal
之后编辑~/.bashrc文件,在其中最后一行添加
bash /home/wy/work/watch_dog/start_watchdog.sh
这样便可以在每次打开终端后便执行特定的程序
关机重启,发现可以打开终端,程序也可以跑,但是程序里打开文件失败,原因是没有以root权限运行程序。我们手动运行程序加sudo需要输入密码,我们这里通过SUDO_ASKPASS进行自动输入密码。 sudo添加密码:
创建密码文件_PWD_TEMP_,写入如下内容并添加可执行权限,将其放到 /home/wy/work/watch_dog/:
#! /bin/bash
echo password
1
2
3
password修改为自己的密码
在start_watchdog.sh中添加如下代码
export SUDO_ASKPASS=./PWD_TEMP
1
在执行程序时,加上sudo chmod a+x 程序,此时不需要输入密码,程序也有了root权限
注:当脚本和程序在一个目录下时,通过执行脚本来执行程序时会有路径的问题,可以通过在脚本里加cd dirname $0解决。
你是把*.desktop文件放到~/.config/autostart目录?
那只需要用文本编辑器把.desktop文件打开,然后把exec那一行加个sudo就行了,比如:
Exec=sudo xxx/xxx/xxx.sh
xxxx.desktop文件入下
Version=1.0
Name=KyrinSystemCheckClient
Exec=kyrinSystemCheck
Type=Application
还有能描述一下你手动正确启动的流程吗?是怎么启动的?点桌面图标还是怎样?
因为有可能是你参数没给全,导致无法启动。
如果你桌面有图标的话,这个图标就是一个desktop文件,直接把能正常启动的这个图标复制到~/.config/autostart再试试
用root用户创建一个crontab定时任务,每1min执行一次,
定时任务里面写个脚本,检查目标应用是否已经启动,如果没启动就给它启动,如果启动了就什么也不干