¿Cómo puedo tener una sesión de pantalla por usuario y configurarla como shell de inicio de sesión?

¿Cómo puedo tener una sesión de pantalla por usuario y configurarla como shell de inicio de sesión?

¿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 ~/.screenrctengan 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 chshen el usuario objetivo y colóquelo /bin/screenlogin.shen el shell cuando se le solicite.

Respuesta2

Correr screen -xRhará 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/bashy presionando enter.

Luego edite el .bashrcarchivo 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 .screenrcen 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).

información relacionada