Implementation of Ubuntu20.04 VNC Installation and Setup
- 2021-08-28 21:37:59
- OfStack
VNC is a remote desktop protocol. Remote control of Ubuntu 20.04 with VNC can be achieved by following the instructions in this article. The VNC installation mode like 1 cannot be used when the host is not plugged into the monitor. The following operations can work normally when the host has and does not have a monitor.
Install x11vnc first
sudo apt-get install x11vnc -y
Set the vnc password
sudo x11vnc -storepasswd /etc/x11vnc.pass
Create an x11vnc self-starting service
Creat/etc/systemd/system/x11vnc. service and write the following
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth /run/user/1000/gdm/Xauthority -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared
[Install]
WantedBy=multi-user.target
Start the x11vnc service
sudo systemctl enable x11vnc
sudo service x11vnc start
At this time, if the monitor is connected to the remote host, it can be accessed through VNC in the LAN.
In order to ensure that the remote host can be accessed remotely through VNC regardless of whether it has a monitor or not, we also need to make the following modifications
Create the default xorg. conf file
sudo Xorg :1 -configure
The program generates the/root/xorg. conf. new file
My default file content is as follows
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "Files"
ModulePath "/usr/lib/xorg/modules"
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/cyrillic"
FontPath "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "built-ins"
EndSection
Section "Module"
Load "glx"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5 6 7"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
EndSection
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
### <percent>: "<f>%"
### [arg]: arg optional
#Option "Accel" # [<bool>]
#Option "AccelMethod" # <str>
#Option "Backlight" # <str>
#Option "CustomEDID" # <str>
#Option "DRI" # <str>
#Option "Present" # [<bool>]
#Option "ColorKey" # <i>
#Option "VideoKey" # <i>
#Option "Tiling" # [<bool>]
#Option "LinearFramebuffer" # [<bool>]
#Option "HWRotation" # [<bool>]
#Option "VSync" # [<bool>]
#Option "PageFlip" # [<bool>]
#Option "SwapbuffersWait" # [<bool>]
#Option "TripleBuffer" # [<bool>]
#Option "XvPreferOverlay" # [<bool>]
#Option "HotPlug" # [<bool>]
#Option "ReprobeOutputs" # [<bool>]
#Option "XvMC" # [<bool>]
#Option "ZaphodHeads" # <str>
#Option "VirtualHeads" # <i>
#Option "TearFree" # [<bool>]
#Option "PerCrtcPixmaps" # [<bool>]
#Option "FallbackDebug" # [<bool>]
#Option "DebugFlushBatches" # [<bool>]
#Option "DebugFlushCaches" # [<bool>]
#Option "DebugWait" # [<bool>]
#Option "BufferCache" # [<bool>]
Identifier "Card0"
Driver "intel"
BusID "PCI:0:2:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Viewport 0 0
Depth 1
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 4
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 8
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 15
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 16
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection
Copy this file to/usr/share/X11/xorg. conf. d/xorg. conf
This file ensures that the system interface can be displayed normally on the monitor when the monitor is inserted on the host computer. Next, we will add a virtual display to the system. When the host has no display, the system will use this virtual display.
Install the Virtual Graphics Driver
sudo apt install xserver-xorg-video-dummy
Add the following at the end of this file
Section "Monitor"
Identifier "Monitor1"
HorizSync 1.0 - 2000.0
VertRefresh 1.0 - 200.0
# Add 16:9 modes, others are automatically detected.
Modeline "1280x720" 74.48 1280 1336 1472 1664 720 721 724 746
Modeline "1920x1080" 172.80 1920 2040 2248 2576 1080 1081 1084 1118
EndSection
Section "Device"
Identifier "Card1"
Driver "dummy"
VideoRam 256000
EndSection
Section "Screen"
DefaultDepth 24
Identifier "Screen1"
Device "Card1"
Monitor "Monitor1"
SubSection "Display"
Depth 24
Modes "1920x1080"
EndSubSection
EndSection
In this way, we created a virtual display using a virtual graphics card. In order for both the virtual monitor and the real monitor to work, we need to change the top ServerLayout
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" 0 0
EndSection
Now restart the remote computer, and you can remotely without a monitor.
There is another problem with the above method. That is, there is no way to remotely when the user is not logged in. Therefore, you need to set the user to log in automatically.