Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

20 DAYS Upcoming Tech Talk: Making Fullstack JavaScript Apps

TUTORIAL

How to Install and Configure VNC on Debian 10


Miscellaneous Debian Applications

By finid and Brian Hogan


Published on October 10, 2019 ! 83.9k

Not using Debian 10?


Debian 10 "
Choose a different version or distribution.

Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics. ×
Introduction
Enter your email address

Virtual Network Computing, or VNC, is a connection system that allows you to use your
Sign Updesktop environment onSSC
keyboard and mouse to interact with a graphical aCRremote
ROOLLLL T
TOOserver.
T
TOOP
P

1 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

It makes managing files, software, and settings on a remote server easier for users who
are not yet comfortable with the command line.

In this guide, you’ll set up a VNC server on a Debian 10 server and connect to it securely
through an SSH tunnel. You’ll use TightVNC, a fast and lightweight remote control
package. This choice will ensure that our VNC connection will be smooth and stable even
on slower internet connections.

Prerequisites
To complete this tutorial, you’ll need:

• One Debian 10 server set up by following the Debian 10 initial server setup guide,
including a non-root user with sudo access and a firewall.

• A local computer with a VNC client installed that supports VNC connections over SSH
tunnels.
• On Windows, you can use TightVNC, RealVNC, or UltraVNC.

• On macOS, you can use the built-in Screen Sharing program, or can use a cross-
platform app like RealVNC.

• On Linux, you can choose from many options, including vinagre , krdc , RealVNC,
or TightVNC.

Step 1 — Installing the Desktop Environment and VNC


Server
By default, a Debian 10 server does not come with a graphical desktop environment or a
VNC server installed, so we’ll begin by installing those. Specifically, we will install
packages for the latest Xfce desktop environment and the TightVNC package available in
the official Debian repository.

On your
Sign server,
up for ourupdate your list
newsletter of packages:
Get the latest tutorials on SysAdmin and open source topics. ×
$ sudo apt update

Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P
Now install the Xfce desktop environment on your server:

2 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

$ sudo apt install xfce4 xfce4-goodies

During the installation, you’ll be prompted to select your keyboard layout from a list of
possible options. Choose the one that’s appropriate for your language and press Enter .
The installation will continue.

Once the installation completes, install the TightVNC server:

$ sudo apt install tightvncserver

To complete the VNC server’s initial configuration after installation, use the vncserver
command to set up a secure password and create the initial configuration files:

$ vncserver

You’ll be prompted to enter and verify a password to access your machine remotely:

Output
You will require a password to access your desktops.

Password:
Verify:

The password must be between six and eight characters long. Passwords more than 8
characters will be truncated automatically.

Once you verify the password, you’ll have the option to create a a view-only password.
Users who log in with the view-only password will not be able to control the VNC
instance with their mouse or keyboard. This is a helpful option if you want to demonstrate
something to other people using your VNC server, but this isn’t required.
Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics. ×
The process then creates the necessary default configuration files and connection
information for the server:

Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P
Output

3 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

Would you like to enter a view-only password (y/n)? n


xauth: file /home/ sammy /.Xauthority does not exist

New 'X' desktop is your_hostname :1

Creating default startup script /home/ sammy /.vnc/xstartup


Starting applications specified in /home/ sammy /.vnc/xstartup
Log file is /home/ sammy /.vnc/ your_hostname :1.log

Now let’s configure the VNC server.

Step 2 — Configuring the VNC Server


The VNC server needs to know which commands to execute when it starts up.
Specifically, VNC needs to know which graphical desktop it should connect to.

These commands are located in a configuration file called xstartup in the .vnc folder
under your home directory. The startup script was created when you ran the vncserver
command in the previous step, but we’ll create our own to launch the Xfce desktop.

When VNC is first set up, it launches a default server instance on port 5901 . This port is
called a display port, and is referred to by VNC as :1 . VNC can launch multiple instances
on other display ports, like :2 , :3 , and so on.

Because we are going to be changing how the VNC server is configured, first stop the
VNC server instance that is running on port 5901 with the following command:

$ vncserver -kill :1

The output should look like this, although you’ll see a different PID:

Output
Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics.
Killing Xtightvnc process ID 17648
×

Before you modify the xstartup file, back up the original:


Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P

4 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

$ mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

Now create a new xstartup file and open it in your text editor:

$ nano ~/.vnc/xstartup

Commands in this file are executed automatically whenever you start or restart the VNC
server. We need VNC to start our desktop environment if it’s not already started. Add
these commands to the file:

~/.vnc/xstartup

#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

The first command in the file, xrdb $HOME/.Xresources , tells VNC’s GUI framework to
read the user’s .Xresources file. .Xresources is where a user can make changes to
certain settings for the graphical desktop, like terminal colors, cursor themes, and font
rendering. The second command tells the server to launch Xfce, which is where you will
find all of the graphical software that you need to comfortably manage your server.

To ensure that the VNC server will be able to use this new startup file properly, we’ll need
to make it executable.

$ sudo chmod +x ~/.vnc/xstartup

Now, restart the VNC server.

$ vncserver

Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics.
You’ll see output similar to this:
×

Output
Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P
New 'X' desktop is your_hostname :1

5 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

Starting applications specified in /home/ sammy /.vnc/xstartup


Log file is /home/ sammy /.vnc/ your_hostname :1.log

With the configuration in place, let’s connect to the server from our local machine.

Step 3 — Connecting the VNC Desktop Securely


VNC itself doesn’t use secure protocols when connecting. We’ll use an SSH tunnel to
connect securely to our server, and then tell our VNC client to use that tunnel rather than
making a direct connection.

Create an SSH connection on your local computer that securely forwards to the
localhost connection for VNC. You can do this via the terminal on Linux or macOS with
the following command:

$ ssh -L 5901 :127.0.0.1: 5901 -C -N -l sammy your_server_ip

The -L switch specifies the port bindings. In this case we’re binding port 5901 of the
remote connection to port 5901 on your local machine. The -C switch enables
compression, while the -N switch tells ssh that we don’t want to execute a remote
command. The -l switch specifies the remote login name.

Remember to replace sammy and your_server_ip with your non-root username and
the IP address of your server.

If you are using a graphical SSH client, like PuTTY, use your_server_ip as the
connection IP, and set localhost:5901 as a new forwarded port in the program’s SSH
tunnel settings.

Once the tunnel is running, use a VNC client to connect to localhost:5901 . You’ll be
prompted to authenticate using the password you set in Step 1.
Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics. ×
Once you are connected, you’ll see the default Xfce desktop.

Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P

6 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

Select Use default config to configure your desktop quickly.

You can access files in your home directory with the file manager or from the command
line, as seen here:

Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics. ×

Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P

7 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

On your local machine, press CTRL+C in your terminal to stop the SSH tunnel and return
to your prompt. This will disconnect your VNC session as well.

Next let’s set up the VNC server as a service.

Step 4 — Running VNC as a System Service


Next, we’ll set up the VNC server as a systemd service so we can start, stop, and restart
it as needed, like any other service. This will also ensure that VNC starts up when your
server reboots.

First, create a new unit file called /etc/systemd/system/vncserver@.service using


your favorite text editor:

$ sudo nano /etc/systemd/system/vncserver@.service

The @ symbol at the end of the name will let us pass in an argument we can use in the
service configuration. We’ll use this to specify the VNC display port we want to use when
we manage the service.

Add the following lines to the file. Be sure to change the value of User, Group,
WorkingDirectory, and the username in the value of PIDFILE to match your username:

/etc/systemd/system/vncserver@.service

[Unit]
Sign up for our newsletter
Description=Start Getserver
TightVNC the latest
at tutorials
startupon SysAdmin and open source topics.
×
After=syslog.target network.target

[Service]
Type=forking Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P
User= sammy

8 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

Group= sammy
WorkingDirectory=/home/ sammy

PIDFile=/home/ sammy /.vnc/%H:%i.pid


ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&
&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

The ExecStartPre command stops VNC if it’s already running. The ExecStart
command starts VNC and sets the color depth to 24-bit color with a resolution of
1280×800. You can modify these startup options as well to meet your needs.

Save and close the file.

Next, make the system aware of the new unit file.

$ sudo systemctl daemon-reload

Enable the unit file.

$ sudo systemctl enable vncserver@1.service

The 1 following the @ sign signifies which display number the service should appear
over, in this case the default :1 as was discussed in Step 2..

Stop the current instance of the VNC server if it’s still running.

$ vncserver -kill :1

Then start it as you would start any other systemd service.

Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics. ×
$ sudo systemctl start vncserver@1

You can verify that it started with this command:


Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P

9 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

$ sudo systemctl status vncserver@1

If it started correctly, the output should look like this:

Output
● vncserver@1.service - Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled
Active: active (running) since Thu 2019-10-10 17:56:17 UTC; 5s ago
Process: 935 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, sta
Process: 940 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited,
Main PID: 948 (Xtightvnc)
. . .

Your VNC server will now be available when you reboot the machine.

Start your SSH tunnel again:

$ ssh -L 5901 :127.0.0.1: 5901 -C -N -l sammy your_server_ip

Then make a new connection using your VNC client software to localhost:5901 to
connect to your machine.

Conclusion
You now have a secured VNC server up and running on your Debian 10 server. Now you’ll
be able to manage your files, software, and settings with an easy-to-use and familiar
graphical interface, and you’ll be able to run graphical software like web browsers
remotely.

Was this helpful? !"# $% $ % &


Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics. ×
'
5

Report an issue
Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P

10 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

About the authors

finid Brian Hogan


Jack of all trades, master of a few I manage the Write for DOnations
program, write and edit community
articles, and make things on the
Internet.

Still looking for an answer?

( Ask a question ) Search for more help

REL ATED

Join the DigitalOcean Community

J o i n 1 M + o t h e r d eve l o p e r s a n d :
• Get help and share knowledge in Q&A
• Subscribe to topics of interest
• Get courses & tools that help you grow as a developer or small business owner

Join Now
Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics. ×

How To Install the Etherpad Collaborative Web Editor on Ubuntu 20.04


Tutorial Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P

11 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

How To Install and Secure phpMyAdmin with Nginx on an Ubuntu 20.04 Server
Tutorial

Comments

5 C o m m e n ts

Leave a comment...

Sign In to Comment

willymanroes March 17, 2020

1 please help.
i have try the tutorial but when im trying connect the vnc, the screen was grey
Reply Report

PatMustard May 16, 2020

0 Thank you! But i failed at the final hurdle. When i try to run
ssh -L 5901:127.0.0.1:5901 -C -N -l (my_ip)
I am told
ssh: connect to host (my_ip) port 22: Connection timed out
I’m on a new HP Chromebook that runs Linux.
Any hints?
edited by MattIPv4
Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics. ×
Reply Report

lawaladekunle June 22, 2020

Did you check the connectivity between your local system and the server?
0
Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P

12 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

nc -vw 5 remote-server-ip 22

You can also try the command like so.

ssh -C -N user_name@remote-server-ip -L 5901:localhost:5901

Reply Report

Avonidas February 17, 2021

0 Thanks for this great tutorial :-)

However, when I connect to the VNC session (Debian 10, xfce), I notice that my $PATH is not
set correctly (as in a normal session).

Also, the session doesn’t pick up the theme, compositor etc. settings, so window
decorations, icons, transparency are not working.

I assume I must suitably configure xstartup in order to get a normal session, but I’m not sure
how. Could you provide some hints/examples?
Reply Report

mannmustermaximilian763 June 11, 2021

0 Thanks for this great tutorial. It helped me a lot with my first VPS. ssh-ing through to VNC
works flawlessly on my raspberrypi. But I cant get running the vnc-ssh-tunnel on my
Windows-machine. I use putty and setting the tunnel in the menu ‘Connection > SSH >
Tunnel’ will not work. Any hints, please?
Reply Report

Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics. ×
This work is licensed under a Creative
Commons Attribution-NonCommercial-
ShareAlike 4.0 International License.
Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P

13 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

GET OUR BIWEEKLY NEWSLETTER

Sign up for Infrastructure as a


Newsletter.

HOLLIE'S HUB FOR GOOD

Working on improving health and


education, reducing inequality,
and spurring economic growth?
We'd like to help.

Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics. ×

BECOME A CONTRIBUTOR
Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P

14 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

You get paid; we donate to tech


nonprofits.

Featured on Community Kubernetes Course Learn Python 3 Machine Learning in Python


Getting started with Go Intro to Kubernetes

DigitalOcean Products Virtual Machines Managed Databases Managed Kubernetes Block Storage
Object Storage Marketplace VPC Load Balancers

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the


cloud and scale up as you grow – whether you’re
running one virtual machine or ten thousand.

Learn More

Company

Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics.
About ×
Leadership
© 2021 DigitalOcean, LLC. All rights reserved.
Blog
Careers
Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P
Partners

15 de 16 30/09/21 12:04
How to Install and Configure VNC on Debian 10 | DigitalOcean https://www.digitalocean.com/community/tutorials/how-to-install-and-co...

Referral Program
Press
Legal
Security & Trust Center

Products Community Contact

Pricing Tutorials Get Support


Products Overview Q&A Trouble Signing In?
Droplets Tools and Integrations Sales
Kubernetes Tags Report Abuse
Managed Databases Product Ideas System Status
Spaces Write for DigitalOcean
Marketplace Presentation Grants
Load Balancers Hatch Startup Program
Block Storage Shop Swag
API Documentation Research Program
Documentation Open Source
Release Notes Code of Conduct

Sign up for our newsletter Get the latest tutorials on SysAdmin and open source topics. ×

Sign Up S
SCCR
ROOLLLL T
TOO T
TOOP
P

16 de 16 30/09/21 12:04

You might also like