First of all: I googled all day and tried several suggestions on different forums with no luck
The problem: I am not able to start a vnc server on a remote machine through ssh Additional information:
- Host: Ubuntu 12.04
- client: Ubuntu 14.04 in VritualBox
- I have no physical access to the remote machine
this works:
ssh -Y user@hostnameWhen I check the Display i get this:
$ echo $DISPLAY
localhost:10.0now I start the vnc server: /usr/lib/vino/vino-server
=> this works but when I connect to vnc I see my own screen (from the ssh client) and not the remote screen
It looks like localhost:10.0 takes my local screen. Am I right?
I also tried this as I want the remote screen:
/usr/lib/vino/vino-server --display :0.0which results in the following:
$ /usr/lib/vino/vino-server --display 0.0
(process:6843): Gtk-WARNING **: Locale not supported by C library. Using the fallback 'C' locale.
Cannot open display: 0.0
Run 'vino-server --help' to see a full list of available command line optionsWhy is it not able to open display 0.0?
52 Answers
In another forum, forum.developer.nvidia.com, "nekokeitai" wrote something which worked for me. These commands can be used via ssh on the remote Ubuntu 18.04 PC:
Install vino:
sudo apt install vinoFind the UUIDs of your connections and use them as a comma separated list inside the square brackets of the last configuration line. I have only tried one UUID inside the single quotes, though:
nmcli connection showConfigure vino:
gsettings set org.gnome.Vino prompt-enabled false
gsettings set org.gnome.Vino require-encryption false
dconf write /org/gnome/settings-daemon/plugins/sharing/vino-server/enabled-connections "['']"Start vino:
export DISPLAY=:0 && /usr/lib/vino/vino-serverNow, on the local PC use remmina with VNC protocol to connect to the remote PC.
Here is some scripts I use to install vino onto remotes.
Within a main setup script I will just include the code that calls the vnc_access script (which is in a subdirectory 'vnc' but change this to wherever you put the 2nd script.
if [ ! -z "$install_vnc" ] ; then user_password='password' vnc_password='password' vnc_script="${BASH_SOURCE%/*}/vnc/vnc_access.sh" printf '\n\tSetting up vino-server on host...\n' >&2 ssh $host_user_name@$host_address \ "bash -s" < "$vnc_script" $user_password "'$vnc_password'" printf '\n\tDone sending vnc to host.\n' >&2
fiAnd here is the vnc_access.sh script
#!/bin/bash
#
# Tools to enable and configure vino for vnc access
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# parse arguments
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
user_password=$1
vino_password=$2
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# initialize values
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vino_password_binary="$(echo -n ${vino_password} | base64)"
declare -A settings
settings[alternative-port]="uint16 5900"
settings[authentication-methods]="['vnc']"
settings[disable-background]=false
settings[disable-xdamage]=false
settings[enabled]=true
# enum 'never' 'always' 'client'
settings[icon-visibility]="'client'"
settings[lock-screen-on-disconnect]=false
settings[mailto]="''"
settings[network-interface]="''"
settings[notify-on-connect]=true
settings[prompt-enabled]=false
settings[require-encryption]=false
settings[use-alternative-port]=false
settings[use-upnp]=false
settings[view-only]=false
settings[vnc-password]="'$vino_password_binary'"
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# main
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# We need to have sudo enabled to do many of these tasks,
# this is a bit of a hack, but it gets the job done.
printf "Enabling sudo privileges...\n" >&2
echo $user_password | sudo -S whoami >/dev/null
printf "\n" >&2
# If vino is not installed, install it
if [ -z "$(dpkg -l | egrep -i 'vino')" ] ; then printf "Installing vino...\n" >&2 sudo apt-get update sudo apt-get install -y vino
fi
# Make sure we are performing these operations of the remotes display.
printf "Forwarding X org Display...\n" >&2
export DISPLAY=:0
sudo xhost +
# Loop through settings and configure vino.
for setting in "${!settings[@]}" ; do current_value="$(gsettings get org.gnome.Vino "$setting")" to_value="${settings[$setting]}" if [[ "$current_value" != "$to_value" ]] ; then printf "changing Vino's ${setting} from ${current_value} to ${settings[$setting]}\n" >&2 DISPLAY=:0 sudo gsettings set org.gnome.Vino "$setting" ${settings[$setting]} fi
done
# Vino requires a reboot to work. If someone can find out how to do this with
# out rebooting or logging out, let me know.
sudo reboot 1