Я использую GNU Screen постоянно. Но я пытался выяснить, есть ли какой-нибудь способ заставить приложения X11 пересылать по экрану, когда я пишу по ssh (это слово?). В настоящее время, если я пытаюсь запустить «gedit» через экран, он открывается на моем «серверном» компьютере, а не на моем клиенте. Если я делаю то же самое за пределами экрана, то все в порядке. Но я хочу, чтобы все было в порядке, когда я тоже использую экран!
Спасибо!
PS: Я нашел проблему в Google и вижу упоминание о xmove, но не могу найти пакет, который содержит xmove на моем Ubuntu. (Ubuntu 10.10)
Чтобы сделать это вручную, после подключения по SSH, но перед повторным подключением к экрану проверьте переменную среды DISPLAY:
echo $DISPLAY
После повторного подключения к экрану явно установите переменную среды :
export DISPLAY=:N.0
где : N.0 - это то, что echo
показывало до присоединения. Это не будет идеально, так как некоторые приложения могут ожидать соединения с Session D-Bus, который немного сложнее отправить по соединению SSH.
В репозиториях есть программа xpra, она похожа на экран gnu для x11. работать не сложно:
X Persistent Remote Applications
Xpra предоставляет вам функциональность GNU Screen для приложений X.
Это позволяет пользователю просматривать удаленные X-приложения на своем локальном компьютере, а также отключать и повторно подключаться к удаленному компьютеру, не теряя состояния запущенных приложений.
Byobu автоматически подключает агенты ssh и gpg. Я мог бы сделать так, чтобы он подключил переменную дисплея к, если это полезно для вас ...
Основываясь на предложении @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
Вот как у меня это работает при запуске byobu
Добавьте эту строку в .bash_login перед строкой _byobu_source ..: 110]
А затем добавьте эту строку в .bashrc :
if [ ! -z ${SSH_CONNECTION+x} ]; then
export DISPLAY=$(cat $HOME/.display.env)
fi
Кажется, что проблема состоит в том, что переменная среды 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
Я не ожидаю, что это будет лучшим решением или самым кратким, но оно работает.
FreeNX - замечательное приложение для работы с удаленными дисплеями.