¿Cómo puedo configurar la pantalla para que se ejecute automáticamente cada vez que un usuario inicia sesión mediante una interfaz CLI? Si ya hay una sesión de pantalla ejecutándose para ese usuario, me gustaría que los nuevos inicios de sesión se adjunten a esa sesión de pantalla. Sería realmente bueno si al adjuntar a la sesión de pantalla se creara una nueva ventana para cada nuevo inicio de sesión.
Respuesta1
Primero, para los usuarios para los que va a hacer esto, asegúrese de que ~/.screenrc
tengan la línea
shell /bin/bash
(o cualquier otro shell que utilice actualmente su usuario). Si no tiene esta configuración configurada y cambia su shell como lo haremos nosotros, el usuario no podrá iniciar sesión. También podrías considerar hacer que el mensaje de inicio de la pantalla desaparezca con esta línea.
startup_message off
Bien, ahora hagamos un script ejecutable que se adjunte a la primera sesión de pantalla que ya se está ejecutando, si sale y no hay ninguna en ejecución, inicia una. Ejecutar en una terminal
sudo nano /bin/screenlogin.sh
Ponga las dos líneas siguientes:
#!/bin/bash
screen -x -r || screen
Presione Ctrl xy luego ypara guardar el archivo. Correr
sudo chmod 755 /bin/screenlogin.sh
Finalmente, ejecútelo chsh
en el usuario objetivo y colóquelo /bin/screenlogin.sh
en el shell cuando se le solicite.
Respuesta2
Correr screen -xR
hará básicamente lo mismo que correr screen -xr || screen
.
El problema es que, hasta donde yo sé, no se pueden pasar indicadores a un shell de inicio de sesión. Además, tener una pantalla que no sea similar a un shell como shell de inicio de sesión probablemente rompería cosas como SFTP.
Entonces, lo que haremos es configurar bash como nuestro shell de inicio de sesión. Luego agregaremos al final de .bashrc (se ejecuta un archivo bash cuando lo inicia) el código que ejecuta la pantalla. Luego, Screen ejecutará cualquier shell especificado en .screenrc
.
Lo haremos para que este comando se ejecute solo bajo una condición especial: solo si la copia de bash en ejecución actual no ha sido iniciada (posiblemente indirectamente) por otra copia de bash. Esto hará que si su usuario quiere bash como su caparazón, y la pantalla comienza a bash dentro de él, el usuario no obtendrá una explosión de muñecas rusas de bash dentro de la pantalla dentro de bash dentro de la pantalla dentro de bash hasta que la computadora se queda sin memoria.
Primero, cambie el shell a /bin/bash ejecutando chsh
, luego ingresando su contraseña, luego escribiendo /bin/bash
y presionando enter.
Luego edite el .bashrc
archivo oculto en su carpeta de inicio, agregando lo siguiente al final:
if [ ${SHLVL} -eq 1 ]; then
((SHLVL+=1)); export SHLVL
exec screen -xR
fi
Ahora, edite (créelo si no sale) el archivo oculto .screenrc
en la carpeta de inicio. Agregue o edite las siguientes configuraciones:
shell /bin/zsh
startup_message off
(Por supuesto, si desea algún otro shell que no sea Zsh, continúe y colóquelo en su lugar. Incluso debería funcionar con bash).