ubuntu开机自动root权限执行程序

方案一:将要运行的脚本添加到/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--------------------

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值