一、问题背景
在(Ubuntu 22.04.5 LTS,无物理显示器)上配置GNOME内置远程桌面(gnome-remote-desktop),从Windows远程桌面客户端连接时出现以下问题:

- Windows端报错:"发生身份验证错误。给函数提供的标志无效"
- gnome-control-center打开远程桌面页面时卡死,需要强制关闭
- 重启后问题依旧
- 每次连接都需要重新输入密码,无法自动保存
二、问题定位过程
2.1 检查远程桌面服务状态
bash
systemctl --user status gnome-remote-desktop.service
输出显示服务已启动,但日志中出现关键错误:
[RDP] Username is not set, denying client
这表明RDP服务端没有正确设置用户名/密码凭证。
2.2 检查凭证配置
bash
grdctl status --show-credentials
输出结果:
RDP:
Status: enabled
Username: (null)
Password: (null)
Username和Password均为(null),这就是连接失败的根本原因------RDP凭证未正确存储。
2.3 尝试设置凭证
bash
grdctl rdp set-credentials <用户名> <密码>
问题发现:命令卡死不动,需要Ctrl+C强制退出。
2.4 诊断gnome-keyring问题
查询Ubuntu官方Bug追踪系统(Launchpad),发现这是一个已知问题:
- Bug #2125590:gnome-control-center进入远程桌面页面时卡死
- 根本原因:gnome-keyring在首次自动登录时未正确初始化,导致密钥环处于锁定状态
三、根本原因分析
gnome-keyring密钥环未正确初始化/处于锁定状态
↓
gnome-control-center尝试访问密钥环存储凭证
↓
需要弹出解锁对话框,但远程终端无法显示图形界面
↓
gnome-control-center卡死,grdctl命令卡住
↓
RDP凭证为null
↓
Windows连接时gnome-remote-desktop读取凭证失败
↓
报错"Username is not set, denying client"
四、解决方案
步骤1:解锁gnome-keyring
bash
echo -n '<你的登录密码>' | gnome-keyring-daemon --replace --unlock
输出类似以下内容表示成功:
** Message: xx:xx:xx.xxx: Replacing daemon, using directory: /run/user/1000/keyring
GNOME_KEYRING_CONTROL=/run/user/1000/keyring
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
步骤2:设置RDP凭证
bash
grdctl rdp set-credentials <你的用户名> <你的RDP密码>
步骤3:重启远程桌面服务
bash
systemctl --user restart gnome-remote-desktop.service
步骤4:验证配置
bash
grdctl status --show-credentials
确认输出中Username和Password不再为(null):
RDP:
Status: enabled
Username: <你的用户名>
Password: <你的RDP密码>
步骤5:修复gnome-control-center卡死问题
bash
systemctl --user restart gnome-keyring-daemon.service
五、优化连接体验
创建.rdp文件实现一键连接
在Windows桌面创建一个.rdp文件,双击即可自动连接,无需每次输入密码:
-
在Windows桌面新建文本文件,重命名为
Ubuntu工控机.rdp -
用记事本打开,输入以下内容:
full address:s:<你的Ubuntu工控机IP地址>
username:s:<你的用户名>
screen mode id:i:2
desktopwidth:i:1920
desktopheight:i:1080
authentication level:i:0
或者点击另存为

- 首次双击连接时,系统会提示输入密码并询问是否保存,点击"是"即可保存密码。后续双击该文件将自动连接,无需再次输入密码。
六、补充说明
6.1 FreeRDP版本问题
Ubuntu 22.04自带的FreeRDP版本(2.6.1)存在已知的NTLM密码哈希计算bug,在2.10.0版本才修复。如果设置凭证后仍报认证错误,可尝试:
- 使用纯字母数字密码(避免特殊字符触发bug)
- 安装xrdp替代 :
sudo apt install xrdp - 切换到Xorg会话:注销后在登录界面选择"Ubuntu on Xorg"而非默认的Wayland
6.2 每次重启后的处理
由于配置了自动登录,每次重启后gnome-keyring会重新锁定。可创建开机自启脚本解决:
bash
mkdir -p ~/.config/autostart
cat > ~/.config/autostart/unlock-keyring.desktop << 'EOF'
[Desktop Entry]
Type=Application
Name=Unlock Keyring
Exec=bash -c 'echo -n "<你的密码>" | gnome-keyring-daemon --replace --unlock'
X-GNOME-Autostart-enabled=true
EOF
七、总结
| 问题 | 原因 | 解决方案 |
|---|---|---|
| RDP连接报"内部错误" | RDP凭证为null | 解锁gnome-keyring后用grdctl设置凭证 |
| gnome-control-center卡死 | 密钥环未正确初始化 | systemctl --user restart gnome-keyring-daemon.service |
| grdctl命令卡住 | 等待图形界面解锁弹窗 | 先用gnome-keyring-daemon --replace --unlock解锁 |
| 认证错误"标志无效" | FreeRDP版本bug | 使用纯字母密码或安装xrdp |
| 每次连接需输入密码 | 未保存凭据 | 创建.rdp文件并保存密码 |
密码信息已替换为占位符。可以直接复制到CSDN发布。