TigerVNC 锁屏问题解决方案

问题诊断

  • 根本原因:Linux logind 服务将会话标记为”locked”(常见于休眠/锁屏后)
  • 典型表现
    • VNC 连接后黑屏
    • 认证失败提示
  • 直接解决方案
    1
    loginctl unlock-sessions  # 解锁所有会话

[TOC]


永久性解决方案

方案A:禁用自动锁屏(推荐用于服务器)

1
2
gsettings set org.gnome.desktop.screensaver lock-enabled false
gsettings set org.gnome.desktop.session idle-delay 0

方案B:配置自动解锁(需要polkit规则)

创建规则文件:

1
sudo nano /etc/polkit-1/rules.d/85-unlock-vnc.rules

添加内容:

1
2
3
4
5
6
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.login1.unlock" &&
subject.isInGroup("vncusers")) {
return polkit.Result.YES;
}
});

方案C:系统级会话保持

1
sudo nano /etc/systemd/logind.conf

修改关键参数:

1
2
IdleAction=ignore
HandleLidSwitch=ignore

系统状态验证

检查会话状态

1
loginctl list-sessions

预期输出示例:

1
2
SESSION  UID USER   SEAT  TTY     STATE
1 1000 user1 seat0 tty2 active # 确保状态非locked

实时监控命令

1
journalctl -f -u systemd-logind | grep -E 'SessionLock|SessionUnlock'

VNC服务优化配置

修改xstartup脚本

1
nano ~/.vnc/xstartup

添加以下内容:

1
2
3
4
#!/bin/bash
# 禁用GNOME自动锁屏
gsettings set org.gnome.desktop.screensaver lock-enabled false
exec gnome-session

关键命令速查表

场景 命令
解锁指定会话 loginctl unlock-session
解锁所有会话 loginctl unlock-sessions
查看锁定状态 loginctl show-session
禁用休眠功能 systemctl mask sleep.target suspend.target

检查最近锁屏记录:

1
journalctl -u systemd-logind --since "1 hour ago"