加载用户桌面后如何在引导期间以 root 身份运行脚本

加载用户桌面后如何在引导期间以 root 身份运行脚本

我有一个以用户身份启动 Dropbox 的脚本保管箱。我希望它在加载桌面环境后自动启动。桌面环境运行为另一个用户不是“保管箱”。

当我运行它时:

root@localhost:/home/gameboy# /etc/init.d/dropbox start

工作正常。

但我需要它自动启动。我放置了一个 Desktop Entry 文件/etc/xdg/autostart/,但没有成功:

gameboy@localhost:~$ sudo cat /etc/xdg/autostart/dropbox.desktop
[Desktop Entry]
Name=Dropbox
Exec=/etc/init.d/dropbox start
Icon=dropbox
Type=Application
Categories=Network;FileTransfer;

gameboy@localhost:~$ sudo cat /etc/init.d/dropbox
#!/bin/bash
### BEGIN INIT INFO
# Provides: dropbox
# Required-Start: 
# Required-Stop: 
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the dropbox service
# Description: starts dropbox using start-stop-daemon
### END INIT INFO

xhost +SI:localuser:dropbox &>/dev/null
DAEMON2=/usr/local/dropbox/dropbox-lnx.x86_64-20.4.19/dropbox

DROPBOX_USERS="dropbox"
DAEMON=/usr/local/dropbox/dropboxd
#unset DISPLAY

start() {
   echo "Starting dropbox..."
   for dbuser in $DROPBOX_USERS; do
      HOMEDIR=$(getent passwd $dbuser | cut -d: -f6)
      if [ -x $DAEMON ]; then
         HOME="$HOMEDIR" start-stop-daemon -b -o -c $dbuser -S -u $dbuser -x $DAEMON
      fi
   done
}

stop() {
   echo "Stopping dropbox..."
   for dbuser in $DROPBOX_USERS; do
      HOMEDIR=$(getent passwd $dbuser | cut -d: -f6)
      if [ -x $DAEMON2 ]; then
         start-stop-daemon -o -c $dbuser -K -u $dbuser -x $DAEMON2
      fi
   done
}

status() {
   for dbuser in $DROPBOX_USERS; do
   dbpid=$(pgrep -u $dbuser dropbox)
   if [ -z "$dbpid" ] ; then
      echo "dropboxd for USER $dbuser: not running."
   else
      echo "dropboxd for USER $dbuser: running (pid $dbpid)"
   fi
   done
}

case "$1" in
   start)
      start
      sleep 1
      status
      ;;

   stop)
      stop
      sleep 1
      status
      ;;

   restart|reload|force-reload)
      stop
      start
      sleep 1
      status
      ;;

   status)
      status
      ;;

   *)
      echo "Usage: /etc/init.d/dropbox {start|stop|reload|force-reload|restart|status}"
      exit 1

esac

exit 0
gameboy@localhost:~$ 

如何让它自动启动?

答案1

当然已经有一段时间了,但对于其他人来说又是一次……这是一个需要 root 权限的守护进程服务;因此,在自动启动的桌面文件中运行它不会执行您想要的操作。

您想要做的是使用 init 系统的守护进程控制(例如 /etc/init.d/dropbox)并将其添加到您的在里面daemopn 的控件,正如您所看到的,它应该在您的图形运行级别中运行。

如果您碰巧没有管理员权限,则无法以普通用户的身份将其作为特权守护程序启动。否则,如果您这样做,请查找使用您链接的 init.d 脚本的 init 手册。

(我知道这已经晚了,但适用于其他用户)。

相关内容