¿Cómo restrinjo a un usuario a un entorno de escritorio específico?

8

Estoy ejecutando una instalación más o menos estándar de Ubuntu Precise 12.04 y estoy bastante satisfecho con la tarea diaria con el entorno de escritorio Unity.

Sin embargo, cuando se trata de jugar, me siento mucho más cómodo con LXDE (antecedentes: en su estado actual, Unity archiva tasas de fotogramas mucho más bajas que, por ejemplo, Unity 2D o LXDE, es un error conocido y en el que se está trabajando).

Para ese propósito, creé un perfil de usuario de jugador y ahora quiero restringirlo para usar solo el entorno de escritorio LXDE.

Para elaborar esto más a fondo: cuando se me pide que inicie sesión después del arranque, solo quiero que LXDE aparezca como una opción para el perfil de usuario de jugador en la pantalla de inicio de sesión, mientras que mi perfil de usuario estándar aún debería tener la opción de elegir qué entorno de escritorio usar.

Gracias de antemano por cualquier idea que pueda ser de ayuda.

FuzzyQ
fuente
Debe mantener su última opción como predeterminada para la próxima vez. ¿No está haciendo esto? ¿Hay alguna razón por la que no desea las otras opciones, si el valor predeterminado era el entorno de escritorio correcto?
reverendj1
También noté este comportamiento después de hacer la pregunta. Básicamente, eso es lo que quería y por qué lo pregunté. Aparte de eso, todavía estoy interesado en una solución: necesito aprender más sobre grupos y permisos ''). Estoy muy sorprendido de que esto parezca ser un problema tan grande. ¿Es imposible de lograr?
FuzzyQ

Respuestas:

4

De acuerdo, según tengo entendido, LightDM (el administrador de inicio de sesión) no parece ser compatible para restringir los entornos de escritorio para un usuario específico . Es un trato de todo o nada. De manera predeterminada, cuando un usuario elige un entorno de escritorio, se convertirá en su entorno de escritorio predeterminado. Cuando inicien sesión la próxima vez, a menos que elijan otra, iniciarán sesión en sus valores predeterminados.

Sin embargo, puede hacerlo para que el usuario no pueda cambiar esto. Este usuario aún podrá seleccionar un entorno de escritorio diferente, pero si lo hace, no cambiará su valor predeterminado. Creo que esta es la forma más segura de hacerlo, si no le preocupa que la persona lo cambie. Todo lo que tiene que hacer es editar su .dmrcarchivo (ubicado en su directorio de inicio, es decir, / home / user). Aquí es donde se almacena su sesión predeterminada. Cambie la Sessionvariable en ese archivo a lo que desee, ubuntues decir, es el Unity DE predeterminado, ubuntu-2des Unity 2D y LXDEes LXDE. Para que esto no se cambie si inician sesión con otro DE, simplemente podemos hacerlo inmutable (inmutable):

sudo chattr +i /home/user/.dmrc

Ahora nadie podrá cambiar ese archivo (incluido el root y otros programas) a menos que elimine el indicador inmutable:

sudo chattr -i /home/user/.dmrc

Si absolutamente NO desea que este usuario inicie sesión alguna vez con otro DE, descubrí una forma realmente hacky (es decir, bajo su propio riesgo) para lograr esto. Estaba un poco aburrido y parecía una cosa divertida de probar. Todos los DE diferentes que LightDM puede ver se guardan /usr/share/xsessionscomo .desktoparchivos. Para su información, puede eliminar cualquiera de estos que no desea que aparezca en la pantalla de inicio de sesión (pero eso lo eliminará para TODOS los usuarios). Si abre cualquiera de estos, son bastante sencillos. Son archivos básicos de iniciador de escritorio, al igual que todos los accesos directos en su escritorio. Cada uno contiene unExeclínea, que es lo que se ejecuta cuando elige su DE en la pantalla de inicio de sesión (es decir, qué DE se inicia). Vamos a aprovechar esto y verificar qué usuario está iniciando sesión. Si el usuario es nuestro usuario restringido, los obligaremos a usar un determinado DE.

Primero, para cada .desktoparchivo /usr/share/xsessions/necesitará crear un script en /usr/local/bin. Para mi ejemplo, mostraré cómo hacer esto ubuntu.desktop, que es el DE de Unity, y usando LXDE como el DE estamos forzando a nuestro usuario restringido (usuario restringido) a usar. Mirando LXDE.desktop, podemos ver que el Execcomando es /usr/bin/startlxdey no hay ningún TryExeccomando. Cuando abre ubuntu.desktop, vemos que el Execcomando es gnome-session --session=ubuntuy el TryExeccomando es unity. El TryExeccomando es exactamente lo que parece. Después de ejecutar el Execcomando, intentará ejecutar el TryExeccomando, pero si falla, no se bloqueará.

Ahora, tomando esos comandos que obtuvimos de los .desktoparchivos, podemos crear nuestros scripts. Los pondremos adentro /usr/share/bin. Tendremos que hacer dos, uno para el Execy otro para el TryExec. Haremos algo como esto:

ubuntude.sh

#!/bin/bash

if [ `/usr/bin/whoami` = "restricteduser" ] ; then
   /usr/bin/startlxde
else
   gnome-session --session=ubuntu
fi

ubuntudetry.sh

#!/bin/bash

if [ `/usr/bin/whoami` != "restricteduser" ] ; then
   unity
fi

Solo estamos probando si la persona que inicia sesión es nuestro usuario restringido y estamos activando el DE apropiado. Ahora, debemos asegurarnos de que sean ejecutables:

sudo chmod +x /usr/local/bin/ubuntude.sh
sudo chmod +x /usr/local/bin/ubuntudetry.sh

Ahora necesitamos cambiar nuestro ubuntu.desktoppara que llame a nuestros scripts, en lugar de los DE reales. Comente las líneas Execy TryExecen el archivo y reemplácelas con esto:

Exec=/usr/local/bin/ubuntude.sh
TryExec=/usr/local/bin/ubuntudetry.sh

Simplemente repita el proceso para cualquier otro DE que pueda tener. Si no hay TryExecun DE, entonces tampoco es necesario crear un script detry.sh para él, ya que LXDE no utiliza a TryExec. Obviamente, esto es un poco complicado, y debe asegurarse de hacer una copia de seguridad de los archivos antes de editarlos, pero funcionará si necesita asegurarse de que un usuario inicie sesión en el DE correcto.

reverendj1
fuente
1
Antes que nada: ¡gracias por tu elaborada respuesta! Este es un enfoque bastante astuto. Pero si entiendo bien la última parte, obligará al usuario restringido a iniciar sesión en lxde sin importar qué opción eligió en lightdm . Pero aún mostrará todas las otras opciones enumeradas en / usr / share / xsessions /, ¿estoy haciendo esto bien? En este caso, prefiero ir con la opción 1. Es una pena que no haya una opción específica para el usuario para configurar sesiones de entorno de escritorio. Eliminar las sesiones x no deseadas de una carpeta de usuario sería útil y simple.
FuzzyQ
1
De nada. Lo tomé como un desafío, y he querido profundizar más en LightDM. Correcto, el usuario seguirá viendo todas las otras opciones, simplemente no importa, ya que se verán obligados a usar LXDE. Como dije, el archivo .dmrc está ahí para mantener los valores predeterminados específicos del usuario, pero sí, no hay una forma integrada de obligar a un usuario a usar solo ciertos DE o restringir cuáles pueden ver / usar. Son todos o nadie, sin el truco que presenté.
reverendj1
1

en Debian Squeeze y Wheezy también puede agregar un .xsessionrc con una sola línea

STARTUP de exportación = XXX

(donde XXX es su secuencia de comandos de sesión forzada, consulte Exec-Line arriba) en el directorio principal del usuario para forzar un determinado tipo de sesión independientemente de lo que el usuario haya elegido.

También debería funcionar en Ubuntu.

(Eche un vistazo a /etc/X11/Xsession.d/40x11-common_xsessionrc y 50x11-common_determine-startup para ver por qué esto funciona)

Peter
fuente
0

La respuesta de reverendj1 no estaba funcionando para mí. La razón podría ser que el valor que especifique en Exec = no se ejecuta directamente, sino que se pasa a / etc / X11 / Xsession como argumento. (fuente: https://askubuntu.com/a/857420/873016 )

Otra solución al problema:
1. Haga una copia de seguridad de todos los archivos
/ usr / share / xsessions / .desktop 2. Elimine todos los archivos / usr / share / xsessions / .desktop
3. Cree solo /usr/share/xsessions/default.desktop con

[Desktop Entry]
Name=Default
Comment=This session is the default session. It will look up the user specific desktop session in ~/.xsession.
Exec=default

"predeterminado" es una palabra clave para Xsession y buscará la sesión específica en el directorio del usuario.
4. Ahora cree un archivo /home/{username}/.xsession para cada nombre de usuario. Para una aplicación "similar a un quiosco", esto debería verse así:

#!/bin/bash

cd /home/{yourUsername}/ && ./startApplication.py
logout

Si, por ejemplo, a otro usuario se le debe permitir iniciar un administrador de escritorio completo, podría verse así:

#!/bin/bash

exec icewm-session
  1. Asegúrese de que el archivo ~ / .xsession sea ejecutable
sudo chmod +x ~/.xsession

Probado en ubuntu 16.04 con lightdm

egodigitus
fuente