Soy nuevo en Linux y configuré la siguiente versión de Ubuntu como VirtualBox VM usandoeste proceso:
ubuntu-20.04.3-desktop-amd64.iso
La primera cuenta creada fue una cuenta de administrador. Lo instalé xsel
y verifiqué que funcionaba. Luego creé una cuenta que no es de administrador y su
la ingresé con su - non-admin-account
. En ese momento xsel
se queja:
xsel: Can't open display: (null)
: Inappropriate ioctl for device
¿Qué tengo que hacer para que sea xsel
accesible después de su
ingresar a otra cuenta?
Actualmente, no estoy interesado en iniciar aplicaciones que inicien sus propias ventanas de cliente cuando su
estén en la cuenta que no es de administrador. Sólo quiero una tubería simple desalida estándaral portapapeles para poder recuperarlo en Vim o en la línea de comando Bash usando Shift+Ins, por ejemplo, echo dog | xsel -ib
o echo dog | xsel -ip
.
Mi plan actual es escribir o redirigir a (digamos) /tmp/tmp.txt
para pasar texto entre un usuario que inició sesión desde una pantalla de inicio de sesión y uno al que se su
accedió. Estoy acostumbrado al comportamiento de Cygwin, donde el portapapeles se comparte independientemente de con qué cuenta se inicia una terminal.
Solución de problemas
Obtengo el mismo comportamiento si inicio sesión en la cuenta que no es de administrador y su
en la cuenta de administrador. xsel
funciona en la cuenta que no es de administrador en la que inicio sesión, pero no en la cuenta de administrador en la que inicio su
sesión.
Básicamente, xsel
no funciona después de un archivo su
.
Según los comentarios, mirélas respuestas de este problema. No reconozco la descripción del problema, ya que los mensajes de error son bastante diferentes, por lo que alguien que busque basándose en los mensajes de error no reconocerá esa pregunta. Además, no entiendo las respuestas. Lo que parecía que podría aplicarse a mi solución fue xhost +localhost
, pero no funcionó porque la sintaxis es incorrecta, al menos para la versión de Ubuntu que estoy usando. Publico la sintaxis quehacetrabaja en mi respuesta a continuación.
Creo que antes de que la página citada anteriormente pueda informar siquiera remotamente a alguien, hay que saber que el problema es la falta de permiso para que una cuenta acceda al servidor X. Por ejemplo, si usted tiene experiencia en el uso de X-windows de Cygwin, probablemente no lo adivinaría porque el problema no se manifiesta allí.
Respuesta1
Puedes usar elpam_xauth
módulo de autenticación para reenviar cookies de sesión X11 a través de su
invocaciones, sin abrir su servidor X a esos usuarios en general.
Esto también permite un control detallado sobre qué usuarios pueden reenviar credenciales a otros usuarios, a través de archivos de configuración en sus $HOME/.xauth/
directorios.
Respuesta2
Residencia enWaltinadorcomentario, encontréesta páginasobre el uso xhost
. A partir de esa información, encontré que lo siguiente funciona:
# Log into admin-username from the login screen,
# then issue:
$ xhost +SI:localuser:nonadmin-username
localuser:nonadmin-username being added to access control
list.
$ xhost
SI:localuser:nonadmin-username
SI:localuser:admin-username
$ su - nonadmin-username
# Enter password when prompted
# Match DISPLAY to its value in the admin account
$ export DISPLAY=:0
$ ls | xsel -ip # Use PRIMARY selection e.g. X-windows mouse highlighting
$ ls | xsel -ib # Use CLIPBOARD buffer e.g. Windows's Ctrl+C/X/V
$ exit # Exit the "su" session
# Paste then works in admin account as expected.
# To test the PRIMARY selection:
$ cat # In admin account
# Paste using middle mouse button or Shift+Ins
Ctrl+D to end input into "cat"
Una alternativa útil para agregar usuarios uno por uno es xhost +local:
, que permite a cualquier usuario local abrir ventanas del cliente. Esto implica que usted confía en todos los que iniciaron sesión en la máquina. Por lo tanto, esto sólo debe hacerse en entornos controlados, como máquinas de un solo usuario.
En muchos entornos, la selección PRIMARIA también se puede pegar en [G]Vim desde el registro *
.
De manera similar, el búfer CLIPBOARD a menudo se puede pegar en [G]Vim desde el registro +
o desde cualquier otra aplicación que use Ctrl+V.