Como executar um script durante a inicialização como raiz após a área de trabalho do usuário ser carregada

1

Eu tenho um script que inicia o dropbox como usuário dropbox . Eu quero que ele inicie automaticamente depois que o ambiente de desktop é carregado. O ambiente de área de trabalho está sendo executado como outro usuário e não como "caixa de depósito".

Quando eu executo com:

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

funciona bem.

Mas preciso que comece automaticamente. Coloquei um arquivo de entrada da área de trabalho em /etc/xdg/autostart/ , mas não obtive êxito:

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:~$ 

Como fazer isso começar automaticamente?

    
por trzczy 10.03.2017 / 18:29

1 resposta

1

Já faz um tempo, mas de novo para os outros ... este é um serviço daemon que precisa de privilégios de root; assim, executá-lo em um arquivo de área de trabalho no início automático não fará o que você queria.

O que você queria fazer era usar o controle de daemon do seu sistema init (por exemplo, /etc/init.d/dropbox) e adicioná-lo ao seu controle init daemopn, e como você pode ver, ele deve ser executado em seus runlevels gráficos.

Se você não tiver direitos de administrador, não será possível iniciá-lo como um daemon privilegiado como usuário normal. Caso contrário, procure o manual do init que usa os scripts init.d vinculados.

(Eu sei que isso é tarde, mas é para outros usuários).

    
por 20.11.2017 / 02:15