Попробуйте отключить аутентификацию при монтировании общего ресурса FreeNFS в вашей системе Rasp Pi:
$ sudo mount -v -t nfs -o nfsvers=3,sec=none 192.168.1.2:/Library /nas
Также убедитесь, что у вас также установлен стек программного обеспечения на стороне клиента NFS.Инструкции о том, как это сделать, приведены в этом FAQ по Raspian, озаглавленном: Как мне смонтировать каталоги с других серверов Linux / Unix / BSD? Как смонтировать NFS .
$ sudo aptitude install nfs-common portmap
Затем запустите rpcbind
:
$ sudo service rpcbind start
Если вы хотите, чтобы он запускался при загрузке:
$ sudo update-rc.d rpcbind enable
Я не могу дать полное решение, потому что вообще не использую sudo. Вы должны экспортировать DISPLAY и XAUTHORITY перед запуском xclock от имени user1.
su -l user1 -c 'export DISPLAY=:0.0;XAUTHORITY=/home/user1/XAUTHORITY;xclock&'
Обратите внимание, что это ненадежное решение, поскольку DISPLAY и XAUTHORITY не всегда совпадают.
Я никогда не использую 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 -
Чтобы подключиться к чужому сеансу 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
, не будет работать, если специально не включено (, и включение этого обычно является плохой идеей ).
Все соображения во всех ответах полезны, но ни одна из предложенных команд не является требуемым решением. Просто для ясности, я пытаюсь предоставить его здесь.
Наилучший подход кажется 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 &