Quiero iniciar un programa en una pantalla como usuario "XYZ" con un script. Este es mi script en forma abreviada:
# replace <newuser> with the user you wish to run teamspeak 3 with. USER="teamspeak" # Do not change this path PATH=/bin:/usr/bin:/sbin:/usr/sbin # The path to the teamspeak 3 server/scripts . example = /home/teamspeak3/teamspeak3-server DIR=/home/teamspeak/voiceserver/teamspeak3 DAEMON=$DIR/ts3server_startscript.sh # Change all PARAMS to your needs. I required the ini so teamspeak used MySQL PARAMS="inifile=ts3server.ini" #Name = The screen will be named from this. NAME=teamspeak3 DESC="Teamspeak Server 3" case "$1" in start) echo "Starting $DESC" script -q -c "su $USER -l -c \"screen -m -d -S $NAME $DAEMON start\"" /dev/null ;; stop) su $USER -l -c "screen -S $NAME -X quit " echo " ... done. $DESC Stopped." ;; restart) su $USER -l -c "screen -S $NAME -X quit " echo " Closed Process, Restarting" script -q -c "su $USER -l -c \"screen -m -d -S $NAME $DAEMON start\"" /dev/null echo " ... done. $DESC Restarted" ;; status) # Check whether there's a "Team Speak 3" process ps aux | grep -v grep | grep ts3server_ > /dev/null CHECK=$? [ $CHECK -eq 0 ] && echo "$DESC is UP" || echo "$DESC is DOWN" ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 1 ;; esac exit 0
Quiero conectarme en la pantalla, pero obtuve esto.
Cannot open your terminal '/dev/pts/0' - please check.
¿Hice algo mal?
Esto sucede porque es posible que haya hecho un sudo su user_name
y luego haya activado el comando de pantalla.
Hay 2 formas de arreglar esto.
script /dev/null
como usuario user_name
y luego escriba screen
Para resolver el problema, intente ejecutar el script /dev/null
como el usuario al que su
antes de iniciar screen
.
script -q -c "su $USER -l -c \"screen -m -d -S $NAME $DAEMON start\"" /dev/null
Más sobre esto:
Inspirado por ambas respuestas respaldadas aquí, agregué la siguiente función a mi .bashrc
:
sscreen(){ script -q -c "screen $*" /dev/null; }
Ahora solo uso sscreen
en lugar de screen
y nunca más tengo que volver a pensar en el problema.