Sou novo no Linux e configurei a seguinte versão do Ubuntu como uma VM VirtualBox usandoEste processo:
ubuntu-20.04.3-desktop-amd64.iso
A primeira conta criada foi uma conta de administrador. Instalei xsel
e verifiquei se funcionava. Em seguida, criei uma conta de não administrador e su
entrei nela com su - non-admin-account
. Nesse momento, xsel
reclama:
xsel: Can't open display: (null)
: Inappropriate ioctl for device
O que devo fazer para tornar xsel
acessível depois de su
entrar em outra conta?
Atualmente, não estou interessado em iniciar aplicativos que iniciam suas próprias janelas de cliente quando su
inseridos na conta de não administrador. Eu só quero uma tubulação simples depadrãopara a área de transferência para que eu possa recuperá-lo no Vim ou na linha de comando do Bash usando Shift + Ins, por exemplo, echo dog | xsel -ib
ou echo dog | xsel -ip
.
Meu plano atual é escrever ou redirecionar para (digamos) /tmp/tmp.txt
para passar texto entre um usuário que efetuou login a partir de uma tela de login e aquele que foi su
direcionado. Estou acostumado com o comportamento do Cygwin, onde a área de transferência é compartilhada independentemente da conta em que o terminal é iniciado.
Solução de problemas
Obtenho o mesmo comportamento se fizer login na conta de não administrador e su
na conta de administrador. xsel
funciona no não administrador em que faço login, mas não na conta de administrador em que faço su
login.
Essencialmente, xsel
não funciona depois de um arquivo su
.
De acordo com os comentários, olheias respostas deste problema. Não reconheço a descrição do problema, pois as mensagens de erro são bem diferentes, então alguém que procura com base nas mensagens de erro não reconhecerá essa pergunta. Além disso, não entendo as respostas. A parte que parecia se aplicar à minha solução era xhost +localhost
, mas não funcionou porque a sintaxe está errada, pelo menos para a versão do Ubuntu que estou usando. Eu posto a sintaxe quefaztrabalhe na minha resposta abaixo.
Acho que antes que aquela página citada acima possa informar alguém mesmo remotamente, é preciso saber que o problema é a falta de permissão de uma conta para acessar o servidor X. Por exemplo, se você já usa o X-windows do Cygwin, provavelmente não adivinharia isso porque o problema não se manifesta aí.
Responder1
Você pode usar opam_xauth
módulo de autenticação para encaminhar cookies de sessão X11 através de su
invocações, sem abrir seu servidor X para esses usuários de forma mais geral.
Isso também permite um controle refinado sobre quais usuários podem encaminhar credenciais para outros usuários, por meio de arquivos de configuração em seus $HOME/.xauth/
diretórios.
Responder2
Baseado emWaltinadorcomentário de, eu encontreiesta páginaem usar xhost
. A partir dessas informações, descobri que o seguinte 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"
Uma alternativa útil para adicionar usuários um por vez é o xhost +local:
, que permite que qualquer usuário local abra janelas do cliente. Isso implica que você confia em todos os que estão conectados à máquina. Portanto, isso só deve ser feito em ambientes controlados, como máquinas de usuário único.
Em muitos ambientes, a seleção PRIMARY também pode ser colada no [G]Vim do registro *
.
Da mesma forma, o buffer CLIPBOARD muitas vezes pode ser colado no [G]Vim do registro +
ou de qualquer outro aplicativo que use Ctrl+V.