X11 Переадресация через экран Gnu, это возможно?

Я использую GNU Screen постоянно. Но я пытался выяснить, есть ли какой-нибудь способ заставить приложения X11 пересылать по экрану, когда я пишу по ssh (это слово?). В настоящее время, если я пытаюсь запустить «gedit» через экран, он открывается на моем «серверном» компьютере, а не на моем клиенте. Если я делаю то же самое за пределами экрана, то все в порядке. Но я хочу, чтобы все было в порядке, когда я тоже использую экран!

Спасибо!

PS: Я нашел проблему в Google и вижу упоминание о xmove, но не могу найти пакет, который содержит xmove на моем Ubuntu. (Ubuntu 10.10)

32
задан 28 October 2010 в 19:36

7 ответов

Чтобы сделать это вручную, после подключения по SSH, но перед повторным подключением к экрану проверьте переменную среды DISPLAY:

echo $DISPLAY

После повторного подключения к экрану явно установите переменную среды :

export DISPLAY=:N.0

где : N.0 - это то, что echo показывало до присоединения. Это не будет идеально, так как некоторые приложения могут ожидать соединения с Session D-Bus, который немного сложнее отправить по соединению SSH.

0
ответ дан 28 October 2010 в 19:36

В репозиториях есть программа xpra, она похожа на экран gnu для x11. работать не сложно:

X Persistent Remote Applications

Xpra предоставляет вам функциональность GNU Screen для приложений X.

Это позволяет пользователю просматривать удаленные X-приложения на своем локальном компьютере, а также отключать и повторно подключаться к удаленному компьютеру, не теряя состояния запущенных приложений.

0
ответ дан 28 October 2010 в 19:36

Byobu автоматически подключает агенты ssh и gpg. Я мог бы сделать так, чтобы он подключил переменную дисплея к, если это полезно для вас ...

0
ответ дан 28 October 2010 в 19:36

Основываясь на предложении @harre, я обнаружил, что это лучшее рабочее решение, по крайней мере для RHEL через Putty. Я знаю, что есть лучший способ, чем создать файл, содержащий var, но он работает из шлюза, чтобы получить X11 доступ к DISPLAY при загрузке через gnu screen.

Автоматизированное решение

Добавить в .bashrc (или .bash_profile, в зависимости от вашего варианта использования)

#.bashrc
if [ -f ~/etc/.bash-screen-x11 ]; then
   echo $DISPLAY > $HOME/.display.env
   source ~/etc/.bash-screen-x11
fi

Затем добавьте следующее файл (или ваш выбор пути)

#~/etc/.bash-screen-x11
# sets back display var.
if [ -z $STY ]; then
  export DISPLAY=$(cat $HOME/.display.env)
fi
0
ответ дан 28 October 2010 в 19:36

Вот как у меня это работает при запуске byobu

Добавьте эту строку в .bash_login перед строкой _byobu_source ..: 110]

А затем добавьте эту строку в .bashrc :

if [ ! -z ${SSH_CONNECTION+x} ]; then
  export DISPLAY=$(cat $HOME/.display.env) 
fi
0
ответ дан 28 October 2010 в 19:36

Кажется, что проблема состоит в том, что переменная среды XAUTHORITY не сохраняется на экранной сессии. Я решил это путем добавления следующего к моему .bashrc. Я не думал, что это должно быть необходимо, но я предполагаю, что Вы делаете то, что Вы должны:

# ensure X forwarding is setup correctly, even for screen
XAUTH=~/.Xauthority
if [[ ! -e "${XAUTH}" ]]; then
 # create new ~/.Xauthority file
 xauth
fi
if [[ -z "${XAUTHORITY}" ]]; then
 # export env var if not already available.
 export XAUTHORITY="${XAUTH}" 
fi

Я не ожидаю, что это будет лучшим решением или самым кратким, но оно работает.

1
ответ дан 28 October 2010 в 19:36

FreeNX - замечательное приложение для работы с удаленными дисплеями.

0
ответ дан 28 October 2010 в 19:36

Другие вопросы по тегам:

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