Допустим, у меня есть 2 учетных записи user1
и user2
. Когда я вхожу в систему как user1
, а затем переключаюсь на user2
использование su
, я могу выполнять программы командной строки, но программы GUI терпят неудачу.
Пример:
user1@laptop:~$ su - user2
user2@laptop:~$ leafpad ~/somefile.txt
No protocol specified
leafpad: Cannot open display:
Так как я могу запустить приложение с графическим интерфейсом?
$XAUTHORITY
он по-прежнему настроен на user1~/.Xauthority
, который, я полагаю, попытается прочитать программой, и не получится, поскольку этот файл обычно имеет режим 0600 (-rw-------
), то есть он недоступен для чтения кем-либо из группы «другие», в которую входит пользователь2. Это означает, что если выchmod o+r ~/.Xauthority
(как пользователь 1), вы решите эту проблему. Я написал сценарий, который демонстрирует это.Ответы:
Су против Су -
Став другим пользователем, вы обычно хотите использовать
su - user2
. Черта заставит user2's.bash_profile
получить источник.Xhost
Кроме того, вам нужно предоставить пользователям доступ к вашему дисплею. Это регулируется X. Вы можете использовать команду,
xhost +
чтобы разрешить другим пользователям разрешение отображать GUI на рабочем столе пользователя user1.ПРИМЕЧАНИЕ. Во время работы
xhost +
вы захотите запустить его, находясь в оболочке, принадлежащей user1.$ DISPLAY
Когда вы станете user2, вам может потребоваться установить переменную окружения
$DISPLAY
.источник
xhost +user2
все еще дает мне эту ошибкуxhost: bad hostname "user2"
. Я гуглил некоторые, и, кажется, мне нужно сделать,xhost +user2@laptop
илиxhost +user2@localhost
, не уверен, что. Тогда это говоритxhost +user2@localhost being added to access control list
.xhost
и указанияexport DISPLAY=:0.0
, запуск по-leafpad
прежнему дает мнеNo protocol specified leafpad: Cannot open display:
, и не удается запустить. Я нашел эту ссылку на linuxquestions.org/questions/linux-newbie-8/… , в которой говорится, что есть некоторые волшебные куки иxauth
. Вы проверяли, что эти вещи работают на вашем компьютере, кстати? Может быть, что-то не так с моей конфигурацией? Я нахожусь на Debian + LXDE.xhost +
работает, и, кажется, больше ничего не нужно (не нужно устанавливать$DISPLAY
). Можете ли вы обновить свой ответ, и я приму его?xhost
выдаёт список в форматеSI:localuser:USERNAME
, поэтомуxhost SI:localuser:user2
должен работать. Ох, и дисплей пользователя можно найти с помощьюw
.xhost +
позволит любому пользователю на любом хосте, который может подключиться к вашему x-серверу, получить доступ к вашему экрану.xhost +SI:localuser:user2
у меня работает на Debian.Вам необходимо поделиться токеном аутентификации от пользователя user1 (при условии, что он
~
является домом пользователя user1 ):источник
tee -a
чтобы избежать путаницы любой существующей информации в.Xauthority
.Вы можете использовать пересылку X11:
источник
Вы можете запустить приложение от другого пользователя. Я буду запускать приложение gimp от пользователя user2, во время входа в систему (GUI) с пользователем 1:
(введите пропуск)
Наслаждаться :)
источник
export DISPLAY
сначала, как сказано в принятом ответе)$ xhost -
Вы можете попробовать команду sux:
sux будет обрабатывать для вас материал $ DISPLAY. Вам может понадобиться установить его с:
под Debian / Ubuntu.
источник
sux
больше не поставляется Debian или Ubuntu. Лучшая альтернатива, которую я могу найти, - это добавитьxhost SI:localuser:root
(или любого другого пользователя),~/.xprofile
чтобы разрешить его навсегда или использоватьrunuser
gksu
/gksudo
альтернатива , которая работала хорошо. Пока он находится в Sid, он удаляется в Buster из-за проблем безопасности.В качестве альтернативы
sux
, для безопасного запуска графической команды (firefox-esr
в примере ниже), как$AUTHUSER
(guest
в примере ниже):код делает:
guest
пользователю доступ к вашему текущему пользователю$DISPLAY
черезxhost +SI:localuser:guest
ssh-askpass
графического спрашивать пароль (конечно, вы могли бы использовать ,sudoers(5)
NOPASSWD:
чтобы избежать этого, если ваша политика безопасности считает , что это нормально. Или вы можете использовать другиеaskpass
программы, или указать их в файлах конфигурации (смsudo(8)
подробную информацию о--askpass
)sudoers(5)
), он запускает команду/usr/bin/firefox-esr
от имени другого пользователя (guest
)guest
) к вашему$DISPLAY
отзываются черезxhost -SI:localuser:guest
наконец,
sudo -K
удаляет кэшированный пароль, поэтому при следующем вызовеssh-askpass
вас снова попросят ввести пароль (вместо использования кэшированного пароля)хотя это немного больше работы, чем что
gksu(8)
либоsux(8)
, но это может быть написано в сценарии, и это гораздо более безопасно, чем:xhost +
(любой пользователь будет иметь доступ к вашему графическому дисплею, пока он действует)gksu
/sux
делалось (временная копия~/.Xauthority
, которая позволяла указанному пользователю копировать вашMIT-MAGIC-COOKIE-1
и продолжать использовать ваш дисплей даже после завершения gksu / sux (если вы не выключили компьютер или не вышли из дисплея - заставки, спящий режим и т. д. не изменили магию печенье).поскольку он разрешит доступ к вашему дисплею только одному локальному пользователю, и только в течение всего времени выполнения команды (когда команда
$AUTHUSER
завершится , он больше не сможет получить доступ к вашему дисплею).Другая безопасной альтернативой является
ssh -X
(без-Y
которой на самом деле делает вас менее безопасными! СмForwardX11Trusted
вssh_config(5)
подробность), как это проще в использовании , если вы не сценарии, но это вызывает additinal накладных расходов (например, он стал медленнее) и некоторые программы могут не работать правильно без небезопасных-Y
.источник
Вам нужно загрузить пользовательский интерфейс установки как user2 .
Попробуйте следовать этому:
Войдите в систему как root :
Проверьте сервер x:
Если вы видите, что часы работают, это хорошо, теперь попробуйте запустить это:
Результат должен выглядеть так:
Теперь позвольте user2 получить доступ к xhost
Теперь попробуйте снова войти в user2 и попробуйте открыть любую из программ GUI.
источник
sudo su
. Используйтеsudo
илиsu
; Выбери один. (3) Вопрос написан в терминахuser1
иuser2
. Пожалуйста, напишите свой ответ с точки зренияuser1
иuser2
. (Делайте или не делайте; нетtri
.) (4) Ваш ответ был бы лучше, если бы он содержал объяснениеSI:localuser
. ……………… Пожалуйста, не отвечайте в комментариях; отредактируйте свой ответ, чтобы сделать его более понятным и полным.