Настоящий VNC на Ubuntu 10.04 LTS через xinetd

1161
Alex Gitelman

Я пытаюсь получить Real VNC сервер на Ubuntu 10.04 LTS 64 бит.

Я попробовал 2 варианта. Во-первых, я получил бесплатную версию Real VNC и начал работать после того, как все требует 32-битных библиотек, взлома конфигурации и т. Д. Это почти хорошо с одной маленькой проблемой, после того, как я отключаю клиента, сервер печатает Abortedи завершает работу. Я пробовал много комбинаций параметров и не мог понять это.

Это примерно командная строка, которую я использовал (но я пробовал много комбинаций параметров).

Xvnc :2 -desktop user-desktop -query localhost -geometry 1920x1200 -depth 16 -AcceptCutText -SendCutText -rfbauth /home/user/.vnc/passwd -SecurityTypes None -DisconnectClients 

Второй вариант Я получил пробную версию Real VNC Enterprise 4.6.1 и установил ее. Теперь я могу с радостью запустить его как автономный сервер, и мои клиенты могут отключиться, не убивая сервер, но когда я пытаюсь использовать его с -inetdопцией, он просто тихо завершает работу. Когда я пробую бесплатную версию, она переходит в режим stdio и печатает сообщение о рукопожатии.

RFB 003.008 

Не в случае с корпоративной версией. Это просто выходит. Нет сообщений и нет журналов.

Так есть ли у кого-нибудь идеи о том, как заставить любой вариант работать?


По рекомендации @grawity я запускаю straceи ltrace. Вот наиболее интересный вывод ltrace (я собрал данные в файл с именем abc и вставил только те строки, которые мне интересны):

$cat abc | egrep 'strchr|print'  fprintf(0x7f330223e860, "\n%s", "Sun Jul 10 13:07:30 2011\n") = 26 strchr("inetd client gone, exiting", ' ') = " client gone, exiting" strchr("client gone, exiting", ' ') = " gone, exiting" strchr("gone, exiting", ' ') = " exiting"   $ cat abc | egrep 'strchr|print' | grep socket strchr("getpeername: Socket operation on"..., ' ') = " Socket operation on non-socket "... strchr("Socket operation on non-socket ("..., ' ') = " operation on non-socket (88)" strchr("operation on non-socket (88)", ' ') = " on non-socket (88)" strchr("on non-socket (88)", ' ') = " non-socket (88)" strchr("non-socket (88)", ' ') = " (88)"  
0

1 ответ на вопрос

1
grawity

Попробуйте запустить его под ltraceили strace.

Может случиться так, что режим inetd требует, чтобы stdin и stdout были сокетами - например, это необходимо для определения IP-адреса клиента. Вполне вероятно, что RealVNC не готов getpeername()к возвращению неудачи.

В качестве альтернативы используйте Xvnc.

Спасибо за упоминание strace и ltrace. Вы можете быть правы в отношении сокетов. Я обновил свой вопрос с выводом ltrace. Но что мне делать дальше, чтобы решить это? Alex Gitelman 12 лет назад 0
@ Алекс: Проблема не должна возникать при запуске RealVNC под * real * xinetd. Вы уже пробовали это? grawity 12 лет назад 0
Я попробовал из реального xinetd. Я могу подключиться, увидеть X экран на секунду, а затем он умирает. Я также не могу понять, как получить журнал от VNC. Alex Gitelman 12 лет назад 0
Попробуйте перехватчик пакетов; Сообщения об ошибках обычно отправляются в stderr, который отправляется через один и тот же сокет xinetd. Также проверьте `dmesg` на наличие программных сбоев и` / var / log / messages` | `/ var / log / syslog` |` / var / log / everything.log` для журналов VNC. grawity 12 лет назад 0
На самом деле, я случайно :( нашел журнал vnc. Не уверен, почему мои попытки направить его в определенное место не удаются. Он всегда просто говорит, что `inetd client отсутствует '. Но в любом случае, очевидно, есть проблема с разрешениями. Я изменил пользователя в xinetd Конфигурационный файл для меня, и теперь я могу подключиться. Тем не менее, он все еще умирает, как только я отключаю клиента. Я думаю, что есть опция для xinetd, которая управляет им. Я просматриваю документы и, вероятно, найду его, но вы помните, что в верхней части твоя голова? Alex Gitelman 12 лет назад 0
@ Алекс: Что делать, если вы измените пользователя на `root`? Кроме того, в режиме inetd сервер * должен * выйти после потери соединения TCP. grawity 12 лет назад 0
Если сервер отключится после отключения, это лишит меня значимости использования vnc. Например, я работаю на своем ноутбуке, подключаюсь, а затем просто захожу на кофе. Ноутбук переходит в режим энергосбережения, и я теряю сеанс. Я почти уверен, что со мной это не случалось с настройками Red Hat. Я попробую root, хотя в документах vnc четко сказано, что этого делать не следует. Alex Gitelman 12 лет назад 0
@ Алекс: Тогда не используйте его в режиме inetd; запустить его как демон. grawity 12 лет назад 0
корень не имеет значения. Это все еще выходит. Alex Gitelman 12 лет назад 0
Я собирался использовать его в качестве демона. Но, наконец, я установил «wait = yes», и это, похоже, решило мою проблему. Ура! Что на самом деле имеет смысл, так как я хочу просто всегда подключаться к одному и тому же экземпляру моего сервера. Alex Gitelman 12 лет назад 0

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