xsel не распознан после "su - other-account"

xsel не распознан после "su - other-account"

Я новичок в Linux и установил следующую версию Ubuntu в качестве виртуальной машины VirtualBox с помощьюэтот процесс:

ubuntu-20.04.3-desktop-amd64.iso

Первая созданная учетная запись была учетной записью администратора. Я установил xselи проверил, что она работает. Затем я создал учетную запись без прав администратора и suвошел в нее с помощью su - non-admin-account. В этот момент xselжалуется:

xsel: Can't open display: (null)
: Inappropriate ioctl for device

Что мне нужно сделать, чтобы сделать аккаунт xselдоступным после suвхода в другой аккаунт?

В настоящее время я не заинтересован в запуске приложений, которые запускают собственные клиентские окна при suвходе в учетную запись без прав администратора. Я просто хочу простой конвейерстандартный выходв буфер обмена, чтобы я мог извлечь его в Vim или командной строке Bash с помощью Shift+Ins, например, echo dog | xsel -ibили echo dog | xsel -ip.

Мой текущий план — написать или перенаправить (скажем) /tmp/tmp.txtдля передачи текста между пользователем, который вошел в систему с экрана входа, и тем, который был sud. Я привык к поведению Cygwin, где буфер обмена является общим независимо от того, под какой учетной записью запущен терминал.


Поиск неисправностей

Я сталкиваюсь с одинаковым поведением, если вхожу в учетную запись без прав администратора и suв учетную запись администратора. xselРаботает в учетной записи без прав администратора, в которую я вхожу, но не в учетной записи администратора, в которую я suвхожу.

По сути, xselне работает после su.

Согласно комментариям, я посмотрел наответы на эту проблему. Я не узнаю описание проблемы, так как сообщения об ошибках совершенно разные, поэтому тот, кто ищет на основе сообщений об ошибках, не узнает этот вопрос. Более того, я не понимаю ответы. Часть, которая, казалось, могла бы быть применима к моему решению, была xhost +localhost, но она не сработала, потому что синтаксис неправильный, по крайней мере для версии Ubuntu, которую я использую. Я публикую синтаксис, которыйделаетработа в моем ответе ниже.

Я думаю, что прежде чем эта процитированная выше страница сможет хотя бы отдаленно информировать кого-то, вы должны знать, что проблема заключается в отсутствии разрешения для учетной записи на доступ к X-серверу. Например, если вы имеете опыт использования X-windows от Cygwin, вы, вероятно, не догадаетесь об этом, потому что проблема там не проявляется.

решение1

Вы можете использоватьpam_xauthмодуль аутентификации для пересылки файлов cookie сеанса X11 между suвызовами, без открытия вашего X-сервера для этих пользователей в целом.

Это также позволяет осуществлять детальный контроль над тем, какие пользователи могут пересылать учетные данные другим пользователям, с помощью файлов конфигурации в их $HOME/.xauth/каталогах.

решение2

На основевалтинаторкомментарий, я нашелэта страницапо использованию xhost. Из этой информации я обнаружил следующее, что работает:

# 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"

Полезной альтернативой добавлению пользователей по одному является xhost +local:, которая позволяет любому локальному пользователю открывать клиентские окна. Это подразумевает, что вы доверяете всем, кто вошел в систему на машине. Поэтому это следует делать только в контролируемых средах, например, на однопользовательских машинах.

Во многих средах ПЕРВИЧНЫЙ выбор также можно вставить в [G]Vim из регистра *.

Аналогично буфер БУФЕРА ОБМЕНА часто можно вставить в [G]Vim из регистра +или из любого другого приложения, использующего Ctrl+V.

Связанный контент