Запуск программы X на дисплее другого пользователя

Нет защиты?

Попробуйте отключить аутентификацию при монтировании общего ресурса FreeNFS в вашей системе Rasp Pi:

$ sudo mount -v -t nfs -o nfsvers=3,sec=none 192.168.1.2:/Library /nas

Установлено клиентское программное обеспечение NFS?

Также убедитесь, что у вас также установлен стек программного обеспечения на стороне клиента NFS.Инструкции о том, как это сделать, приведены в этом FAQ по Raspian, озаглавленном: Как мне смонтировать каталоги с других серверов Linux / Unix / BSD? Как смонтировать NFS .

$ sudo aptitude install nfs-common portmap

Затем запустите rpcbind :

$ sudo service rpcbind start

Если вы хотите, чтобы он запускался при загрузке:

$ sudo update-rc.d rpcbind enable

Ссылки

0
15.12.2018, 13:28
4 ответа

Я не могу дать полное решение, потому что вообще не использую sudo. Вы должны экспортировать DISPLAY и XAUTHORITY перед запуском xclock от имени user1.

su -l user1 -c 'export DISPLAY=:0.0;XAUTHORITY=/home/user1/XAUTHORITY;xclock&'

Обратите внимание, что это ненадежное решение, поскольку DISPLAY и XAUTHORITY не всегда совпадают.

0
28.01.2020, 02:18

Я никогда не использую sudo, но стандартная процедура, позволяющая другому пользователю находиться на вашем дисплее, состоит в том, чтобы экспортировать информацию об авторизации с помощью xauth(1), а не вручную с помощью ~/.Xauthority.

Таким образом, если user1зарегистрирован на дисплее, гость(user2)должен выполнить следующие команды:

user2$ export DISPLAY=:0
user2$ ssh user1@localhost "xauth extract - $DISPLAY" | xauth merge -
user2$ xclock

suможно использовать вместоssh:

user2$ su - user1 -c "xauth extract - $DISPLAY" | xauth merge -
3
28.01.2020, 02:18

Чтобы подключиться к чужому сеансу X11, вам потребуется правильное значение переменной среды DISPLAYи содержимое файла ~/.Xauthorityдругого пользователя.

Если user1зарегистрирован локально, их значение переменной DISPLAY почти всегда равно :0.0, так как это первый локальный дисплей X11.

Как user2, вы можете сделать это:

export DISPLAY=':0.0'
sudo cp ~user1/.Xauthority $TMP/user1_Xauthority
sudo chown user2 $TMP/user1_Xauthority
export XAUTHORITY=$TMP/user1_Xauthority
xclock &

Поскольку DISPLAY=':0.0'указывает приложениям X11 подключаться к локальному дисплею через сокет UNIX, расположенный в /tmp/.X11-unix/X0, эти команды должны выполняться на том же хосте, на котором установлен физический дисплей.

Исторически сложилось так, что протокол X11 изначально разрабатывался также для того, чтобы можно было подключаться к дисплею по сети, используя TCP-порт (6000 + номер дисплея ), но это оказалось небезопасно, и на современных Linux/ Системы Unix обычно отключены по умолчанию, поэтому использование чего-то вроде export DISPLAY=remotehost:0.0для передачи вывода вашего приложения X11 на дисплей, подключенный к remotehost, не будет работать, если специально не включено (, и включение этого обычно является плохой идеей ).

1
28.01.2020, 02:18

Все соображения во всех ответах полезны, но ни одна из предложенных команд не является требуемым решением. Просто для ясности, я пытаюсь предоставить его здесь.

Наилучший подход кажется mosvy, в том числе из-за очень ограниченных прав доступа к файлу ~user1/.Xauthority.

Сначала необходимо получить номер активного DISPLAY, используемого user1. Он доступен, например, из вывода whoи обычно это :0.

Если user2является sudoer, требуется только его пароль, а не пароль user1. Из user2подсказка:

user2$ export DISPLAY=:0
user2$ sudo -u user1 -i xauth extract - $DISPLAY | xauth merge -
user2$ xclock

Или (, действующий какuser1):

user2$ sudo -u user1 DISPLAY=:0 xclock &
0
28.01.2020, 02:18

Теги

Похожие вопросы