Steps to Solve the VNC "Gray Screen" Issue on Ubuntu Systems

English 简体中文 繁体中文 ภาษาไทย Tiếng Việt
Summary

Ubuntu users often face a "Gray Screen" issue when connecting via VNC, typically stemming from desktop environment initialization problems or Wayland's default usage. A robust solution involves installing a lightweight desktop environment like XFCE or GNOME Flashback alongside TightVNC. Key steps include disabling Wayland in GDM3's configuration to ensure X11 is used, preparing VNC configuration files for the desired user, and crafting an `xstartup` script to explicitly launch a `gnome-flashback-metacity` session. Finally, a Systemd service is created to manage and autostart the VNC server, ensuring persistent remote desktop access after a system reboot. This comprehensive approach resolves the common VNC display issues on Ubuntu systems.

title20.png

เครื่องมือแชร์เดสก์ท็อปแบบกราฟิก เช่น TeamViewer, AnyDesk และ LogMeIn ช่วยให้ผู้ใช้สามารถควบคุมหน้าจอ คีย์บอร์ด และเมาส์ของคอมพิวเตอร์เครื่องอื่นจากระยะไกลได้ ในบรรดาเครื่องมือเหล่านี้ เครื่องมืออย่าง TigerVNC, TightVNC, RealVNC นำเสนอการควบคุมข้ามแพลตฟอร์มผ่านโปรโตคอล VNC (Virtual Network Computing) โดยใช้ประโยชน์จากมาตรฐาน Remote Frame Buffer (RFB) เพื่อส่งการอัปเดตหน้าจอและเหตุการณ์อินพุต VNC ช่วยให้สามารถควบคุมเดสก์ท็อประยะไกลได้ อย่างไรก็ตาม ผู้ใช้ Ubuntu มักพบปัญหา 'Gray Screen' ที่รบกวนเมื่อเชื่อมต่อผ่าน VNC ซึ่งเป็นการแสดงผลที่ว่างเปล่าและไม่ตอบสนองซึ่งหยุดการทำงาน คู่มือนี้มีขั้นตอนที่ชัดเจนในการวินิจฉัยและแก้ไขปัญหาเซิร์ฟเวอร์ VNC ทั่วไปนี้ เพื่อคืนค่าฟังก์ชันการทำงานของเดสก์ท็อประยะไกลบนระบบ Ubuntu ของคุณ

Author:      Yuancheng Liu
Created:     2025/05/31
Version:     v_0.0.1
Copyright:   Copyright (c) LiuYuancheng

ข้อกำหนดเฉพาะของปัญหา

เมื่อตั้งค่าเซิร์ฟเวอร์ VNC บนระบบ Ubuntu บางระบบ ผู้ใช้อาจพบปัญหาที่น่าหงุดหงิด: หลังจากเชื่อมต่อจากระยะไกล หน้าจอจะแสดงเฉพาะพื้นหลังสีเทาพร้อมเคอร์เซอร์ที่ปรากฏเป็น "X" สีดำขนาดเล็ก ดังแสดงด้านล่าง:

s_0310.png

ในกรณีอื่นๆ พื้นหลังของเดสก์ท็อปจะเปลี่ยนเป็นสีเทาโดยมีเพียงหน้าต่าง File Explorer เดียว (เช่น Files หรือ Nautilus) ที่มองเห็นได้:

s_0414.png

และเมื่อคุณคลิกที่เดสก์ท็อป คุณอาจได้รับข้อผิดพลาดที่ไม่สามารถหา Desktop ได้ แม้ว่าจะแสดงโฟลเดอร์ Desktop อยู่ก็ตาม:

s_0512.png

ปัญหานี้มักเกิดจากปัญหาในการเริ่มต้นสภาพแวดล้อมเดสก์ท็อปในระหว่างเซสชัน VNC สาเหตุทั่วไป ได้แก่:

  • สภาพแวดล้อมเดสก์ท็อป (เช่น GNOME, XFCE หรือ MATE) ขาดหายไปหรือกำหนดค่าไม่ถูกต้อง

  • การตั้งค่าดัชนีการแสดงผลที่ไม่ถูกต้องในเซิร์ฟเวอร์ VNC

  • สิทธิ์หรือความเป็นเจ้าของไฟล์การกำหนดค่าที่สำคัญไม่ถูกต้อง

  • การเรียกใช้เซิร์ฟเวอร์ VNC ในฐานะ root ซึ่งอาจนำไปสู่ความขัดแย้งในสภาพแวดล้อม

แม้ว่าจะมีบทช่วยสอนออนไลน์มากมายที่นำเสนอวิธีแก้ไขต่างๆ แต่บทความนี้มีคำแนะนำทีละขั้นตอนสำหรับการแก้ไขปัญหาหน้าจอสีเทา โดยเริ่มจากระบบ Ubuntu ที่สะอาด วิธีแก้ปัญหาใช้ได้แม้ในขณะที่เซิร์ฟเวอร์ VNC ทำงานในฐานะ root และได้รับการทดสอบบน Ubuntu 18.04, 20.04 และ 22.04


ขั้นตอนโดยละเอียดในการแก้ไขปัญหา (รองรับการเข้าถึง Root)

ส่วนนี้มีวิธีแก้ปัญหาทีละขั้นตอนที่สมบูรณ์เพื่อแก้ไข ปัญหาหน้าจอสีเทา ใน TightVNC บนระบบ Ubuntu วิธีแก้ปัญหาคือการกำหนดค่าสภาพแวดล้อมเดสก์ท็อป XFCE ที่มีน้ำหนักเบา หรือเซสชัน GNOME Flashback และเปิดใช้งาน VNC ให้ทำงานได้อย่างถูกต้อง แม้ว่าจะทำงานภายใต้ผู้ใช้ root ก็ตาม

ขั้นตอนที่ 1: ติดตั้งสภาพแวดล้อมเดสก์ท็อป XFCE

XFCE เป็นสภาพแวดล้อมเดสก์ท็อปที่มีน้ำหนักเบาซึ่งทำงานได้ดีกับ VNC

sudo apt-get update
sudo apt-get install xfce4 -y

ติดตั้ง XFCE goodies (เครื่องมือและยูทิลิตี้เสริม):

sudo apt-get install xfce4-goodies

ขั้นตอนที่ 2: ติดตั้ง TightVNC และ GNOME Flashback Session

TightVNC คือเซิร์ฟเวอร์ VNC ที่ใช้ในการตั้งค่านี้ GNOME Flashback มีเซสชันที่ง่ายกว่าซึ่งเหมาะสำหรับการเข้าถึงระยะไกล

sudo apt-get install tightvncserver -y
sudo apt-get install gnome-session-flashback -y

XFCE หรือ GNOME Flashback ช่วยให้มั่นใจได้ว่าเดสก์ท็อปมีน้ำหนักเบาและเข้ากันได้สำหรับเซสชัน VNC


ขั้นตอนที่ 3: ปิดใช้งาน Wayland (เปิดใช้งาน X11)

Ubuntu ใช้ Wayland เป็นค่าเริ่มต้น ซึ่งไม่เข้ากันได้กับการกำหนดค่า VNC จำนวนมาก

แก้ไขการกำหนดค่า GDM3:

sudo nano /etc/gdm3/custom.conf

ยกเลิกการใส่ความคิดเห็นหรือแก้ไขบรรทัดต่อไปนี้:

WaylandEnable=false

บันทึกและปิดไฟล์ วิธีนี้ช่วยให้มั่นใจได้ว่า X11 จะถูกใช้หลังจากรีบูต เมื่อปิดใช้งาน Wayland จะอนุญาตให้ VNC ทำงานภายใต้ X11


ขั้นตอนที่ 4: เตรียมไฟล์การกำหนดค่า VNC (ในฐานะ Root)

คู่มือนี้กำหนดค่า VNC สำหรับผู้ใช้ root เพื่อวัตถุประสงค์ในการสาธิต สำหรับการใช้งานปกติ ขอแนะนำให้กำหนดค่าภายใต้ผู้ใช้ทั่วไป

sudo mkdir -p /root/.vnc
sudo chmod 0644 /root/.vnc

ตั้งรหัสผ่าน VNC:

sudo touch /root/.vnc/passwd
sudo chmod 0600 /root/.vnc/passwd
sudo bash -c 'echo "" | tightvncpasswd -f > /root/.vnc/passwd'

ขั้นตอนที่ 5: เริ่มต้น VNC และสร้างสคริปต์ xstartup

เริ่ม VNC เพื่อเริ่มต้นไฟล์การกำหนดค่า:

vncserver

จากนั้นหยุดเพื่อทำตามขั้นตอนต่อไป:

vncserver -kill :1

สร้างหรือเขียนทับไฟล์ xstartup:

sudo touch /root/.vnc/xstartup
sudo chmod 0600 /root/.vnc/xstartup
sudo nano /root/.vnc/xstartup

วางเนื้อหาต่อไปนี้:

#!/bin/sh
autocutsel -fork
xrdb $HOME/.Xresources
xsetroot -solid grey
export XKL_XMODMAP_DISABLE=1
export XDG_CURRENT_DESKTOP="GNOME-Flashback:Unity"
export XDG_MENU_PREFIX="gnome-flashback-"
unset DBUS_SESSION_BUS_ADDRESS
gnome-session --session=gnome-flashback-metacity --disable-acceleration-check --debug &

ตรวจสอบให้แน่ใจว่าไฟล์สามารถเรียกใช้งานได้:

chmod +x /root/.vnc/xstartup

สคริปต์ xstartup จะเริ่มเซสชันกราฟิกอย่างชัดเจนและปิดใช้งานความขัดแย้ง DBUS


ขั้นตอนที่ 6: สร้างบริการ Systemd เพื่อเริ่ม VNC โดยอัตโนมัติ

สร้างไฟล์บริการ VNC:

sudo nano /etc/systemd/system/tightvncserver.service

เพิ่มเนื้อหาต่อไปนี้:

[Unit]
Description=TightVNC Server
After=syslog.target network.target

[Service]
Type=forking
User=root
ExecStartPre=-/usr/bin/tightvncserver -kill :0
ExecStart=/usr/bin/tightvncserver -geometry 1920x1080 -depth 24 :0
ExecStop=/usr/bin/tightvncserver -kill :0

[Install]
WantedBy=multi-user.target

ตั้งค่าสิทธิ์:

sudo chmod 0600 /etc/systemd/system/tightvncserver.service

เปิดใช้งานและเริ่มบริการ:

bashCopyEditsudo systemctl daemon-reexec
sudo systemctl enable tightvncserver
sudo systemctl start tightvncserver

บริการ Systemd ช่วยให้มั่นใจได้ว่า VNC จะเริ่มทำงานโดยอัตโนมัติเมื่อบูตเครื่อง


ขั้นตอนที่ 7: รีบูตและเชื่อมต่อผ่าน VNC

ตอนนี้ รีบูตเครื่อง:

sudo reboot

หลังจากรีบูต ให้ใช้ไคลเอนต์ VNC เช่น TigerVNC Viewer หรือ RealVNC เพื่อเชื่อมต่อกับ:

s_0713.png

:5900

หรือหากใช้การแสดงผล :1:

:1

คุณควรเห็นเดสก์ท็อปที่ใช้งานได้อย่างสมบูรณ์ดังต่อไปนี้:

s_0614.png

แก้ไขปัญหาแล้ว!


อ้างอิง


Last edit by LiuYuancheng ([email protected]) at 02/06/2025, if you have any problem, please send me a message.

  RELATED

No related programming articles found. Browse all programming tutorials and articles.

  COMMENT

1
小佳
Nov 13, 2025 at 4:46 am

太棒了,解決了我的烦恼。

对于startxfce4,我的问题出现在:

Ubuntu 默认使用 Wayland,它与许多 VNC 配置不兼容。 编辑 GDM3 配置 :

sudo nano /etc/gdm3/custom.conf

取消注释或修改以下行:

WaylandEnable=false
修改完这个,我再进行修改 配置,桌面就恢复了。

sudo vi .vnc/xstartup ,然后写入

 
 
#!/bin/sh

autocutsel -fork
xrdb $HOME/.Xresources
xsetroot -solid grey

# 禁用 X 键盘映射,避免乱码
export XKL_XMODMAP_DISABLE=1
# 清除会话管理器和 DBUS 地址,防止图形桌面冲突
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
# 启动 Xfce 桌面(若为 GNOME 桌面,替换为 "gnome-session &")
startxfce4 &
# gnome-session &