方案一:将要运行的脚本添加到/etc/rc.local,此方法最为简单,只需要将要运行的脚本添加到rc.local中,注意需要在exit 0之前。
实施:
1、写一个脚本start_watchdog.sh,在脚本里启动需要执行的二进制程序。脚本与程序需要添加可执行权限。脚本与程序在/home/wy/work/watch_dog/目录
2、在rc.local添加gnome-terminal -x bash -c “/home/wy/work/watch_dog/start_watchdog.sh”
重启后发现test.sh脚本执行了,但是却没有出现终端,通过加log发现在打开新终端时出现如下错误:
error: XDG_RUNTIME_DIR not set in the environment. 通过查资料发现是因为rc.local中的脚本会在系统登录前执行,而此时我们还没有进入桌面,所以执行失败。(有可能不正确,欢迎指正)。此方法失败
方案二:使用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
# add your ownpassword
echo password
password修改为自己的密码
在start_watchdog.sh中添加如下代码
export SUDO_ASKPASS=./_PWD_TEMP_
在执行程序时,加上sudo chmod a+x 程序,此时不需要输入密码,程序也有了root权限
注:当脚本和程序在一个目录下时,通过执行脚本来执行程序时会有路径的问题,可以通过在脚本里加cd dirname $0
解决。
gnome-terminal[基本用法]:
引用自:
https://blog.csdn.net/hhg337372083/article/details/83449642
gnome-terminal命令用于打开一个新的终端,直接在命令行
$ gnome-terminal
1
就可以打开一个新的终端,有一些常用参数:
打开后自动最大化
$ gnome-terminal --maximize
1
打开后全屏
$ gnome-terminal --full-screen
1
设置标题
$ gnome-terminal --title=“new title”
1
打开多个终端,多个tab
$ gnome-terminal --window --window #打开两个
$ gnome-terminal --window --tab --window --tab --tab #打开两个,第一个两个tab,第二个3个tab
1
2
设置打开的位置和大小(宽度x高度+左侧偏移量+上方偏移量)
$ gnome-terminal --geometry=80x25+10+10
1
[启动后自动执行命令]
有两个参数可以实现这个功能,-e和-x,这两个区别在于:
-e 可以出现多次,如果在所有–window前面,表示对所有window和tab起作用,
如果在–window或者–tab后面,表示只针对这个tab执行,要注意-e后面只能有一个参数
也就是说如果有空格,需要用引号,具体见后例
-x 只能出现一次,在-x后面的所有内容,均认为是要执行的命令,所以可以出现空格
这些命令是针对所有tab都执行的
比如:
$ gnome-terminal -e ls
$ gnome-terminal -x ls
1
2
这两个的执行结果都一样,就是新的终端闪一下就没了,有几种办法:
一种是修改terminal的配置,在terminal点右键,选择Profiles->Profile Preferences
然后找到Title and Command,里面有一项When command exits,后面选择为
Hold the terminal open,然后就可以了
第二种是把结果重定向给less,这样less执行完之前,是不会退出的
$ gnome-terminal -x ls|less
1
第三种是在bash里面再启用一个bash
$ gnome-terminal -x bash -c “ls; exec bash”
$ gnome-terminal -e ‘bash -c “ls; exec bash”’
1
2
注意最后一个命令是exec bash,如果直接写bash也行,相当于开了一个子shell,这样有个
缺点,就是直接按关闭按钮的话,会提示还有程序在运行
需要注意的是,这里执行的命令,在调用.bashrc之前,所有.bashrc的所有配置都无效
如果需要用到.bashrc里面的内容,有个变通的办法,在.bashrc最后加上一句
--------------------.bashrc--------------------