現象:通過 x11vnc 遠程桌面連接 Linux 時,按 Caps Lock 切換大小寫無效,始終輸入小寫字母,必須按住 Shift 才能輸入大寫。
x11vnc 默認不同步鍵盤 LED 狀態(Caps Lock、Num Lock、Scroll Lock),導致服務端 X 服務器認為鎖定鍵未按下,繼續發送小寫鍵碼。
啟動 x11vnc 時添加 -capslock 參數:
x11vnc -capslock -display :0 -auth /var/run/lightdm/root/:0 -forever -loop -noxdamage -repeat -rfbauth /home/user/.vnc/passwd -rfbport 5900
或寫入 systemd 服務單元:
[Unit] Description=x11vnc VNC Server After=graphical.target [Service] Type=simple User=user ExecStart=/usr/bin/x11vnc -capslock -display :0 -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/user/.vnc/passwd -rfbport 5900 Restart=on-failure [Install] WantedBy=multi-user.target
-capslock:同步 Caps Lock 狀態(核心修復)。-display :0:目標 X 顯示器。-auth guess:自動尋找 Xauthority 文件(支持 GDM/LightDM/SDDM)。-forever -loop:持續運行,客戶端斷開後繼續監聽。-noxdamage:禁用 XDamage 擴展(兼容性更好)。-repeat:啟用按鍵重複。-rfbauth:VNC 密碼文件(vncpasswd 生成)。-rfbport 5900:VNC 端口。| 問題 | 解決 |
|---|---|
| 鍵盤佈局錯誤 | 服務端 setxkbmap us 或客戶端設置正確佈局 |
| 滾動條/滑鼠卡頓 | 啟用 -noxdamage、調整編碼 -encoding tight |
| 無法輸入中文 | 服務端啟用 fcitx/ibus,環境變量 GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx |
| 安全性 | 僅綁定 localhost + SSH 隧道轉發 ssh -L 5900:localhost:5900 user@server |