# Перенаправить графический вывод с Xorg-сервера через ssh

## Lyrax

Здравствуйте.

Я прочитал очень много рецептов, как это сделать. Возможно, я что-то не понимаю.

У меня есть ноутбук с Ubuntu 12.04 и гибридной графикой nvidia. Там все настроено, optirun работает, CUDA-программы выпоняются - в общем все нормально. Есть системный блок свидеокартой nvidia 780 Ti. Подключил к системнику монитор, установил на него Gentoo. Драйвера nvidia встали нормально, CUDA работает. Поставил туда Xorg, настроил. Запускаю startx - появляется twm, nvidia-settings и glxgears работают нормально.

Что я хочу:

Есть ноутбук + монитор (для удобства, но монитора может не быть и будет один ноутбук) - это клиент.

Есть системный блок без монитора - это сервер.

Оба они подключены к одному роутеру. С ноутбука я загружаю задачу и сервер ее считает. В обычном состоянии Xorg на сервере отключен. Но иногда мне будет нужен графический интерфейс, и я хочу включать Xorg и передавать изображение с сервера на ноутбук(клиент).

Настроил ssh. В режиме без иксов подключается нормально. Вот так: 

```
$ ssh user1@192.168.1.40
```

Логинится, файлы передаются, команды выполняются.

Файл ssh_config на сервере (то, что относиться к X):

```
ForwardX11 yes

AddressFamily inet

Port 2405 

```

Файл ssh_config клиента (то, что относиться к X):

```
ForwardAgent yes

ForwardX11 yes

AddressFamily inet

```

Подключаюсь к серверу:

```
$ ssh -X -v user1@192.168.1.40

много сообщений и в конце

debug1: Requesting X11 forwarding with authentication spoofing.

debug1: Requesting authentication agent forwarding.

debug1: Sending environment.

debug1: Sending env LANG = ru_RU.UTF-8

X11 forwarding request failed on channel 0

```

Запускаю Xorg на сервере через ssh:

```
$ startx

много сообщений и в конце

Loading extension GLX

(EE) 

Fatal server error:

(EE) no screens found(EE) 

(EE) 

Please consult the The X.Org Foundation support 

         at http://wiki.x.org

 for help. 

(EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.

(EE) 

(EE) Server terminated with error (1). Closing log file.

xinit: giving up

xinit: unable to connect to X server: Connection refused

xinit: server error

```

Файл /var/log/Xorg.0.log:

```

много строк и в конце

147 [  3482.294] (EE) NVIDIA(0): Failed to assign any connected display devices to X screen 0.

148 [  3482.294] (EE) NVIDIA(0):     Set AllowEmptyInitialConfiguration if you want the server

149 [  3482.294] (EE) NVIDIA(0):     to start anyway

150 [  3482.540] (EE) NVIDIA(0): Failing initialization of X screen 0

151 [  3482.540] (II) UnloadModule: "nvidia"

152 [  3482.540] (II) UnloadSubModule: "wfb"

153 [  3482.540] (II) UnloadSubModule: "fb"

154 [  3482.540] (EE) Screen(s) found, but none have a usable configuration.

155 [  3482.540] (EE)

156 Fatal server error:

157 [  3482.540] (EE) no screens found(EE)

158 [  3482.540] (EE)

159 Please consult the The X.Org Foundation support

160      at http://wiki.x.org

161  for help.

162 [  3482.540] (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.

163 [  3482.540] (EE)

164 [  3482.548] (EE) Server terminated with error (1). Closing log file.
```

На ноутбуке:

```
$ echo $DISPLAY

:0
```

На сервере (монитор не подключен):

```
$ echo $DISPLAY

```

Пустота.

Если подключатся к серверу, так:

```
$ ssh -Y -v user1@192.168.1.40
```

, то результат такой же.

Пробовал подключить монитор к серверу и запустить Xorg (через startx), потом на ноутбуке:

```
$ ssh -Y -v user1@192.168.1.40
```

Опять выдает:

X11 forwarding request failed on channel 0

Что можете посоветовать? Заранее Благодарен.

----------

## Lyrax

https://stackoverflow.com/questions/18061121/x11-forwarding-error-on-ubuntu-though-it-works-on-windows

Здесь решение, которое еще не пробовал:

I solved it - it was an authentication issue. Executing the following line on Server resolved the issue:

$ xauth add ${client_ip}:0 . ${hex_key}

xauth:  creating new authority file /homes/${username}/.Xauthority

where ${client_ip} is the client with X server running, ${hex_key} is the 32-character hex string. Afterwards upon assinging the $DISPLAY env variable I can now connect successfully.

Но я не понимаю, где взять hex_key.

Возможно это мое, потому что при:

```
$ startx

hostname: Unknown host

xauth:  file /home/user1/.serverauth.2531 does not exist

дальше много строк

```

----------

## Pinkbyte

На сервере НЕ НАДО править /etc/ssh/ssh_config - это конфиг ssh-клиента самого сервера! На сервере надо править /etc/ssh/sshd_config.

Там достаточно включить

```
X11Forwarding yes
```

После этого нужно перезапустить sshd на сервере:

```
/etc/init.d/sshd restart
```

И можно заходить с клиента:

```
ssh -Y user@server
```

Убедиться что всё настроено верно, можно после входа, если переменная DISPLAY будет установлена так(при условии что умолчания параметров X11DisplayOffset и X11UseLocalhost не менялись - остались закомментированы):

```
localhost:10.0
```

ForwardX11 yes можно на клиенте в конфиге не включать, если используется опция -Y в командной строке

Далее - запускать X-сервер на самом сервере не нужно. После данных мапинуляций вы сможете запускать одиночные приложения на сервере и вывод будет автоматически передавать по ssh-каналу на ваш X-сервер, запущенный на клиенте.  За это как и отвечает переменная DISPLAY - она будет передавать на "виртуальный" X-сервер с дисплеем №10, который будет слушать sshd и отдавать уже на реальный X-сервер соответственно.Last edited by Pinkbyte on Tue Aug 12, 2014 7:45 am; edited 1 time in total

----------

## Lyrax

Работает. Спасибо.

----------

## TigerJr

startx на сервере - not gentoway

сервер на nvidia - not gentoway

----------

