VNC server проблема с поддержкой шифрования.

Сегодня срочно потребовалось зайти удаленно на десктоп с убунтой 14.04. Такое бывает крайне редко, последний раз пару лет назад, но на всякий случай стандартный vnc сервер у меня всегда включен.

С первой попытки зайти не удалось, vnc-viewer жаловался на какие то проблемы с протоколом 3.3. Другим клиентом зайти тоже не удалось. Вторая Ultravnc сказала «Error no security type suitable for rfb 3.3 supported».

 

Решить эту фигню можно только с помощью заклинания в консоли:

gsettings set org.gnome.Vino require-encryption false

которое отключить нафиг шифрование.

P.S.

Если попытаться выполнить эту команду удаленно (например по ssh с другого хоста), то в ответ получишь:

(process:12024): dconf-WARNING **: failed to commit changes to dconf: Cannot autolaunch D-Bus without X11 $DISPLAY

решается эта беда с помощью такого скрипта (спер отседа: http://askubuntu.com/questions/457016/how-to-change-gsettings-via-remote-shell):


#!/bin/bash

# Remember to run this script using the command «source ./filename.sh»

# Search these processes for the session variable
# (they are run as the current user and have the DBUS session variable set)
compatiblePrograms=( nautilus kdeinit kded4 pulseaudio trackerd )

# Attempt to get a program pid
for index in ${compatiblePrograms[@]}; do
PID=$(pidof -s ${index})
if [[ «${PID}» != «» ]]; then
break
fi
done
if [[ «${PID}» == «» ]]; then
echo «Could not detect active login session»
return 1
fi

QUERY_ENVIRON=»$(tr ‘\0’ ‘\n’ < /proc/${PID}/environ | grep «DBUS_SESSION_BUS_ADDRESS» | cut -d «=» -f 2-)»
if [[ «${QUERY_ENVIRON}» != «» ]]; then
export DBUS_SESSION_BUS_ADDRESS=»${QUERY_ENVIRON}»
echo «Connected to session:»
echo «DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS}»
else
echo «Could not find dbus session ID in user environment.»
return 1
fi

return 0

в моем случае, я сохранил его в файл discover.sh (естесстевнно нужно ему chmod +x сделать), и запустил командой:


. ./discover.sh unity

именно точка, потом пробел, и затем путь к скрипту.
При этом на удаленном хосте должна быть запущена сессия unity, иначе фокус не получится.

В ответ он должен выплюнуть что-то вроде:

Connected to session:
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-rJBfi5qWpb

Как все это работает, читай по ссылке, в оригинале.