เครื่องมือแชร์เดสก์ท็อปแบบกราฟิก เช่น 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" สีดำขนาดเล็ก ดังแสดงด้านล่าง:
ในกรณีอื่นๆ พื้นหลังของเดสก์ท็อปจะเปลี่ยนเป็นสีเทาโดยมีเพียงหน้าต่าง File Explorer เดียว (เช่น Files หรือ Nautilus) ที่มองเห็นได้:
และเมื่อคุณคลิกที่เดสก์ท็อป คุณอาจได้รับข้อผิดพลาดที่ไม่สามารถหา Desktop ได้ แม้ว่าจะแสดงโฟลเดอร์ Desktop อยู่ก็ตาม:
ปัญหานี้มักเกิดจากปัญหาในการเริ่มต้นสภาพแวดล้อมเดสก์ท็อปในระหว่างเซสชัน 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 เพื่อเชื่อมต่อกับ:
:5900
หรือหากใช้การแสดงผล
:1
::1
คุณควรเห็นเดสก์ท็อปที่ใช้งานได้อย่างสมบูรณ์ดังต่อไปนี้:
แก้ไขปัญหาแล้ว!
อ้างอิง
-
https://hustakin.github.io/bestpractice/setup-vncserver-for-ubuntu/
-
https://askubuntu.com/questions/800302/vncserver-grey-screen-ubuntu-16-04-lts
-
https://bytexd.com/how-to-install-configure-vnc-server-on-ubuntu/
Last edit by LiuYuancheng (liu_yuan_cheng@hotmail.com) at 02/06/2025, if you have any problem, please send me a message.