Ejecutar programas GUI como otro usuario en Linux
A veces es útil ejecutar un programa como otro usuario sin tener que cambiar la sesión de escritorio. Para los programas de línea de comandos es fácil ya que podemos simplemente usar el comando su:
monstruosoft@monstruosoft-PC:~$ su - invitado Contraseña: invitado@monstruosoft-PC:~$ whoami invitado invitado@monstruosoft-PC:~$ exit logout monstruosoft@monstruosoft-PC:~$ whoami monstruosoft
Pero sin intentamos ejecutar una aplicación con interfaz gráfica (GUI), recibimos un error:
monstruosoft@monstruosoft-PC:~$ su - invitado Contraseña: invitado@monstruosoft-PC:~$ xeyes No protocol specified Error: Can't open display: :0
Esto se debe a que el display fue creado por el usuario que inició la sesión y, de forma predeterminada, el servidor X no permite que otros usuarios puedan usarlo. Sin embargo, siendo que el servidor X usa un modelo servidor-cliente, no es sorpresa que pueda fácilmente aceptar conexiones de otros usuarios si se configura para ello. Por suerte contamos con el comando xhost que nos permite hacer justamente eso e indicar al servidor X el tipo de conexiones que debe aceptar. De forma predetermiada, el servidor X sólo acepta conexiones del usuario que inició la sesión:
monstruosoft@monstruosoft-PC:~$ xhost access control enabled, only authorized clients can connect SI:localuser:monstruosoft
Podemos usar el comando xhost para permitir el acceso al servidor X a otros usuarios locales usando el siguiente comando:
monstruosoft@monstruosoft-PC:~$ xhost +local: non-network local connections being added to access control list monstruosoft@monstruosoft-PC:~$ xhost access control enabled, only authorized clients can connect LOCAL: SI:localuser:monstruosoft
Ahora todos los usuarios locales pueder tener acceso al servidor X:
monstruosoft@monstruosoft-PC:~$ su - invitado Contraseña: invitado@monstruosoft-PC:~$ xeyes invitado@monstruosoft-PC:~$
Cuando ya no necesites acceso al servidor X desde otro usuario puedes revocar los accesos:
monstruosoft@monstruosoft-PC:~$ xhost -local: non-network local connections being removed from access control list
Para más información sobre el comando xhost puedes consultar su manual:
monstruosoft@monstruosoft-PC:~$ man xhost