Ubuntu 24.04 自动登录 + 远程桌面固定密码完整教程
为什么需要这份教程
在开始配置之前,让我们先了解一下你可能遇到的困境。
一个令人沮丧的场景
想象一下这个场景:你在公司或学校有一台 Ubuntu 桌面机器,希望下班后或在家时能远程访问它。你兴冲冲地配置好了远程桌面共享,设置了一个好记的密码,又开启了自动登录(这样重启后不用跑到机器前输入密码)。
一切看起来完美——直到你第一次重启机器,打开 Windows 的远程桌面连接,输入你设置的密码……
“用户名或密码不正确”
你确信没有输错,于是跑到机器前查看远程桌面设置,发现密码变成了一串随机字符!你重新设置密码,这次记得更牢,回到座位测试——成功了。
然后第二天,机器因为某种原因重启了,密码又变了……
这不是 Bug,而是”特性”
如果你搜索这个问题,会发现很多人都遇到过。这并不是 Ubuntu 的 Bug,而是 GNOME 安全机制的”副作用”。简单来说:
- 远程桌面密码存储在一个叫做”密钥环”(Keyring) 的加密保险箱里
- 密钥环的钥匙就是你的登录密码
- 自动登录跳过了输入密码的步骤,所以密钥环没有被解锁
- 远程桌面服务发现打不开保险箱,就只好临时生成一个随机密码
这是一个安全与便利之间的冲突。GNOME 的设计者认为:如果你选择了自动登录(牺牲了一定的安全性),那么敏感信息(如远程桌面密码)就不应该自动暴露。
但对于我们这些在局域网内使用、主要追求便利性的用户来说,这个”保护”反而成了障碍。
本教程将帮你实现
通过本教程,你将获得以下体验:
- 开机即用:系统启动后自动进入桌面,无需站在机器前输入密码
- 密码固定:远程桌面使用你设置的固定密码,不再随机变化
- 随时连接:从任何支持 RDP 的设备(Windows、macOS、手机)远程访问
- 最小侵入:方案不修改任何系统配置,不影响其他软件,完全可逆
技术架构概览
我们的解决方案原理很简单:既然密钥环需要密码才能解锁,那就让系统启动后自动输入密码来解锁它。
1 | 开机启动 |
整个过程在开机后几秒内自动完成,你完全感知不到。
本教程适用场景
本教程专为以下情况设计:
- 你的 Ubuntu 机器在局域网内,安全性要求不高
- 你希望无人值守运行,能够随时远程访问
- 你已经或计划开启自动登录功能
- 你受够了每次重启后密码随机变化的问题
重要提示:本方案需要将你的登录密码以明文形式保存在文件中。虽然文件权限设置为仅所有者可读,但如果你的机器可能被他人物理接触,请谨慎考虑。对于局域网内的个人机器,这通常不是问题。
实际环境说明
本教程基于以下实际环境编写和验证,你可以根据自己的情况调整:
| 项目 | 本教程环境 | 说明 |
|---|---|---|
| 操作系统 | Ubuntu 24.04 LTS | 也适用于其他使用 GNOME 的发行版 |
| 桌面环境 | GNOME 46 | 其他版本步骤类似 |
| 用户名 | cpu | 替换为你的实际用户名 |
| 用户密码 | cpu | 替换为你的实际密码 |
| 远程桌面协议 | RDP (端口 3389) | Ubuntu 24.04 默认使用 |
| 测试客户端 | Windows 11 远程桌面连接 | 任何 RDP 客户端均可 |
占位符说明:本教程中的
cpu是示例用户名和密码,请在实际操作时替换为你自己的。
第一部分:理解问题
在动手之前,让我们先深入理解问题的本质。这不仅有助于你理解后续的解决方案,也能在遇到类似问题时举一反三。
什么是 GNOME 密钥环
GNOME 密钥环(Keyring)是一个安全的密码存储系统,你可以把它想象成一个加密的保险箱。很多应用程序会把敏感信息存放在这里:
- WiFi 密码
- 浏览器保存的网站密码
- 邮件客户端的账户密码
- 远程桌面的连接凭据
这个保险箱有一把”主钥匙”,默认情况下就是你的登录密码。当你正常登录系统时(输入密码),这把钥匙就会自动打开保险箱,各个应用程序就能读取自己存放的信息。
为什么自动登录会出问题
当你开启自动登录后,登录过程变成了这样:
- 系统启动,GDM(登录管理器)检测到自动登录配置
- GDM 直接启动你的 GNOME 会话,不询问密码
- 密钥环没有收到密码,保持锁定状态
- 远程桌面服务启动,尝试从密钥环读取凭据
- 密钥环说:”抱歉,我是锁着的,给不了你”
- 远程桌面服务只好生成一个随机密码
这就是问题的根源:没有密码输入,就没有钥匙来开锁。
查看问题的证据
如果你想亲眼看到这个问题,可以在自动登录后执行以下命令:
1 | journalctl --user -u gnome-remote-desktop.service --no-pager -n 20 |
你很可能会看到类似这样的错误信息:
1 | [RDP] Couldn't retrieve RDP credentials: The name :1.4 was not provided by any .service files |
这就是远程桌面服务在抱怨:”我找不到凭据!”
第二部分:解决方案设计
理解了问题,解决方案就呼之欲出了:我们需要在自动登录后,自动提供密码来解锁密钥环。
方案对比
在确定最终方案之前,我们考虑了几种可能的解决方法:
| 方案 | 做法 | 优点 | 缺点 |
|---|---|---|---|
| 取消密钥环加密 | 将密钥环密码设为空 | 简单直接 | Chrome/Edge/VS Code 会频繁弹窗要求创建安全存储 |
| 创建专用密钥环 | 为远程桌面单独创建无密码的密钥环 | 隔离影响 | GNOME 可能不遵循设置,可靠性差 |
| 启动脚本解锁 | 开机后用脚本自动输入密码解锁 | 对系统无侵入,完全可逆 | 需要明文保存密码 |
为什么选择启动脚本方案
我们最终选择了启动脚本方案,原因如下:
- 零侵入:不修改任何系统文件或配置
- 完全可逆:删除我们创建的 3 个文件即可恢复原状
- 对其他软件无影响:密钥环解锁后,一切如常,Chrome 等软件正常工作
- 可靠性高:使用 systemd 标准机制,有日志可查
唯一的代价是需要将密码保存在文件中。考虑到这是局域网内的个人机器,这个代价是可以接受的。
方案工作流程
我们的方案包含三个组件:
1 | ┌─────────────────────────────────────────────────────────────┐ |
现在,让我们开始动手实现。
第三部分:前置准备
在开始配置之前,请确保已完成以下准备工作。
确认自动登录已开启
打开「设置」应用,导航到「系统 → 用户」,确认「自动登录」开关已开启。
如果还没开启,点击「解锁」按钮,输入密码后开启它。
确认远程桌面已配置
打开「设置」应用,导航到「系统 → 远程桌面」:
- 确认「远程桌面」开关已开启
- 确认「远程控制」开关已开启
- 在「如何连接」部分,记下你设置的用户名和密码
这里设置的用户名和密码,就是你希望用于远程连接的固定凭据。
确认问题存在
重启系统后,执行以下命令检查当前的远程桌面凭据:
1 | grdctl status --show-credentials |
如果显示的密码与你设置的不同(变成了随机字符串),说明问题确实存在,可以继续本教程。
第四部分:详细配置步骤
接下来是具体的配置步骤。每一步都只包含一个操作,并附有详细解释和预期结果,方便你逐步验证。
步骤 1:创建脚本目录
首先,创建用于存放解锁脚本的目录。
1 | mkdir -p ~/.local/bin |
命令解释:
mkdir:创建目录的命令(make directory)-p:如果目录已存在则不报错,如果父目录不存在则一并创建~/.local/bin:用户级别的可执行文件目录,这是 Linux 标准目录结构的一部分
预期结果:命令执行后没有任何输出,表示成功。
验证方法:
1 | ls -la ~/.local/bin |
应该看到类似这样的输出:
1 | 总计 8 |
步骤 2:创建密码存储目录
创建专门用于存放密钥环解锁密码的目录。
1 | mkdir -p ~/.local/share/keyring-unlock |
命令解释:
~/.local/share/:用户数据目录,符合 XDG 基础目录规范keyring-unlock:我们自定义的目录名,专门存放密钥环解锁相关的文件
预期结果:没有输出表示成功。
步骤 3:创建 systemd 服务目录
创建用于存放 systemd 用户服务配置的目录。
1 | mkdir -p ~/.config/systemd/user |
命令解释:
~/.config/systemd/user/:systemd 用户级服务的标准配置目录- 放在这个目录下的
.service文件会被systemctl --user命令识别和管理
预期结果:没有输出表示成功。
步骤 4:创建密码文件
将你的登录密码保存到文件中。这是解锁密钥环所需的”钥匙”。
1 | echo -n "你的登录密码" > ~/.local/share/keyring-unlock/.password |
命令解释:
echo:输出文本的命令-n:不在末尾添加换行符(非常重要,多余的换行会导致密码错误)"你的登录密码":替换为你的实际登录密码>:重定向符号,将输出写入文件.password:文件名以点开头,表示这是一个隐藏文件
实际示例(假设你的密码是 cpu):
1 | echo -n "cpu" > ~/.local/share/keyring-unlock/.password |
预期结果:没有输出表示成功。
验证方法:
1 | cat ~/.local/share/keyring-unlock/.password |
应该直接显示你的密码,没有换行:
1 | cpu |
如果密码后面有空行,说明你没有使用
-n参数,需要重新执行命令。
步骤 5:设置密码文件权限
将密码文件的权限设置为仅所有者可读写,防止其他用户读取。
1 | chmod 600 ~/.local/share/keyring-unlock/.password |
命令解释:
chmod:修改文件权限的命令(change mode)600:权限数字,每一位代表一类用户的权限- 第一个
6(所有者)= 读(4) + 写(2) = 可读可写 - 第二个
0(同组用户)= 无任何权限 - 第三个
0(其他用户)= 无任何权限
- 第一个
预期结果:没有输出表示成功。
验证方法:
1 | ls -la ~/.local/share/keyring-unlock/.password |
应该看到权限是 -rw-------:
1 | -rw------- 1 cpu cpu 3 12月 24 10:00 .password |
步骤 6:创建解锁脚本
现在创建核心的解锁脚本。这个脚本会在系统启动后自动执行,负责解锁密钥环并重启远程桌面服务。
1 | nano ~/.local/bin/unlock-keyring.sh |
命令解释:
nano:一个简单易用的文本编辑器- 如果你更喜欢其他编辑器,可以使用
gedit(图形界面)或vim
在编辑器中,输入以下完整内容:
1 |
|
保存并退出:
- 如果使用
nano:按Ctrl+O保存,按Enter确认文件名,按Ctrl+X退出 - 如果使用
gedit:按Ctrl+S保存,然后关闭窗口
脚本功能说明:
| 功能 | 说明 |
|---|---|
| 智能等待 | 循环检测密钥环守护进程是否就绪,最多等待 30 秒 |
| 双重保险 | 主方法失败后自动尝试备用解锁方法 |
| 日志记录 | 所有操作都记录到 systemd 日志,便于排查问题 |
| 服务重启 | 解锁成功后重启远程桌面服务,确保它能读取正确的凭据 |
💡 为什么要重启 gnome-remote-desktop 服务?
这是整个方案的关键步骤。原因如下:
服务启动时机问题:
gnome-remote-desktop服务在 GNOME 会话启动时就已经运行,此时密钥环尚未解锁,服务无法读取你设置的固定凭据,只能使用随机生成的临时密码。重启后重新读取凭据:当我们解锁密钥环后,必须重启该服务,让它重新从已解锁的密钥环中读取你设置的用户名和密码。
潜在影响:
- 如果此时有活跃的远程桌面连接,该连接会被短暂中断(约 2-3 秒)
- 中断后客户端通常会自动重连,或者你需要手动重新连接
- 这种情况只在系统刚启动时发生一次,日常使用中不会再触发
步骤 7:设置脚本执行权限
脚本文件默认没有执行权限,需要手动添加。
1 | chmod +x ~/.local/bin/unlock-keyring.sh |
命令解释:
chmod +x:添加可执行权限- 没有这个权限,脚本将无法被执行
预期结果:没有输出表示成功。
验证方法:
1 | ls -la ~/.local/bin/unlock-keyring.sh |
应该看到权限中包含 x(可执行):
1 | -rwxrwxr-x 1 cpu cpu 2547 12月 24 10:00 unlock-keyring.sh |
步骤 8:创建 systemd 服务文件
创建 systemd 服务配置,让系统在启动时自动执行我们的解锁脚本。
1 | nano ~/.config/systemd/user/unlock-keyring.service |
输入以下内容:
1 | [Unit] |
保存并退出。
配置说明:
| 配置项 | 含义 |
|---|---|
After=gnome-session-initialized.target |
等待 GNOME 会话完全初始化后再执行 |
Type=oneshot |
这是一次性任务,执行完就结束 |
%h |
systemd 变量,自动替换为用户的家目录 |
RemainAfterExit=yes |
脚本退出后服务仍标记为”活动”状态 |
WantedBy=gnome-session-initialized.target |
随 GNOME 会话自动启动 |
步骤 9:重新加载 systemd 配置
让 systemd 识别我们新创建的服务文件。
1 | systemctl --user daemon-reload |
命令解释:
systemctl --user:操作用户级别的 systemd 服务(不是系统级别的)daemon-reload:重新扫描并加载所有服务配置文件
预期结果:没有输出表示成功。
步骤 10:启用服务
设置服务开机自动启动。
1 | systemctl --user enable unlock-keyring.service |
命令解释:
enable:启用服务,创建必要的符号链接,使其随指定目标自动启动
预期结果:
1 | Created symlink /home/cpu/.config/systemd/user/gnome-session-initialized.target.wants/unlock-keyring.service → /home/cpu/.config/systemd/user/unlock-keyring.service. |
这表示服务已成功配置为开机自启动。
步骤 11:手动测试脚本
在重启之前,让我们先手动测试一下脚本是否能正常工作。
1 | ~/.local/bin/unlock-keyring.sh |
预期输出:
1 | [2025-12-24 10:00:00] INFO: 开始等待 gnome-keyring-daemon 就绪... |
看到”密钥环解锁成功”和”服务运行正常”就说明脚本工作正常。
步骤 12:验证远程桌面凭据
确认远程桌面服务现在能正确读取凭据了。
1 | grdctl status --show-credentials |
命令解释:
grdctl:GNOME 远程桌面的命令行配置工具status --show-credentials:显示当前状态,包括用户名和密码
预期输出:
1 | Overall: |
关键确认:Username 和 Password 应该是你之前在设置中配置的值,而不是随机字符串。
步骤 13:重启系统并验证
现在是最终验证的时刻。重启系统:
1 | sudo reboot |
重启后,系统应该:
- 自动登录到 GNOME 桌面
- 我们的解锁服务自动运行
- 密钥环被解锁
- 远程桌面服务使用正确的凭据
第五部分:完整验证清单
重启后,请按以下步骤逐一验证配置是否成功。
验证 1:检查解锁服务状态
1 | systemctl --user status unlock-keyring.service |
预期结果:
1 | ● unlock-keyring.service - Unlock GNOME Keyring for auto-login |
关键是看到 Active: active (exited),表示服务已成功执行完毕。
验证 2:查看解锁日志
1 | journalctl --user -t unlock-keyring --no-pager |
预期结果:应该看到从”开始等待”到”全部完成”的完整日志,没有错误信息。
验证 3:检查远程桌面服务
1 | systemctl --user status gnome-remote-desktop.service |
预期结果:服务状态为 active (running),日志中有 RDP server started 且没有错误。
验证 4:确认凭据正确
1 | grdctl status --show-credentials |
预期结果:显示你设置的固定用户名和密码。
验证 5:从 Windows 远程连接
这是最终的实际验证:
- 在 Windows 上按
Win+R,输入mstsc并回车 - 在”计算机”框中输入 Ubuntu 的 IP 地址(如
192.168.5.6) - 点击”连接”
- 输入你设置的用户名和密码
- 成功进入 Ubuntu 桌面!
恭喜! 如果你能成功连接,说明配置完全成功。
第六部分:系统影响说明
为了便于日后维护和问题追溯,这里详细记录本方案对系统的所有影响。
新增文件清单
本方案总共创建了 3 个文件,全部位于用户目录下:
| 文件路径 | 用途 | 权限 | 内容敏感度 |
|---|---|---|---|
~/.local/share/keyring-unlock/.password |
存储登录密码 | 600 | 高(明文密码) |
~/.local/bin/unlock-keyring.sh |
解锁脚本 | 755 | 低 |
~/.config/systemd/user/unlock-keyring.service |
服务配置 | 644 | 低 |
自动创建的符号链接
启用服务时,systemd 会自动创建一个符号链接:
1 | ~/.config/systemd/user/gnome-session-initialized.target.wants/unlock-keyring.service |
进程影响
- 每次开机后,脚本会调用
gnome-keyring-daemon --replace --unlock,这会启动一个新的密钥环守护进程替换原有的 - 这是正常且预期的行为,不会影响系统稳定性
对其他软件的影响
| 软件 | 影响 |
|---|---|
| Google Chrome | ✅ 无影响,密码管理正常 |
| Microsoft Edge | ✅ 无影响,密码管理正常 |
| VS Code | ✅ 无影响,设置同步正常 |
| WiFi | ✅ 无影响,自动连接正常 |
| 其他使用密钥环的应用 | ✅ 无影响,因为密钥环已被正确解锁 |
这正是选择此方案的主要原因:解锁后的系统状态与正常登录完全一致。
第七部分:日常维护
修改登录密码后的操作
⚠️ 重要提醒:如果你修改了系统登录密码,必须同步更新密码文件,否则下次重启后会出现以下问题:
- 密钥环解锁时使用错误密码不会报错,但会导致远程桌面凭据变为
(null)- 远程桌面连接将失败,显示”用户名或密码不正确”
由于 Linux PAM 的技术限制,无法实现密码自动同步,必须手动更新。
修改密码后,请立即执行以下命令更新密码文件:
1 | echo -n "新密码" > ~/.local/share/keyring-unlock/.password |
验证更新是否成功:
1 | cat ~/.local/share/keyring-unlock/.password |
修改远程桌面密码
直接在「设置 → 系统 → 远程桌面」中修改即可,不需要额外操作。新密码会自动保存到密钥环中。
查看服务日志
排查问题时,可以查看详细日志:
1 | # 查看解锁服务的日志 |
临时禁用服务
如果需要临时禁用自动解锁(例如调试其他问题):
1 | systemctl --user disable unlock-keyring.service |
重新启用:
1 | systemctl --user enable unlock-keyring.service |
第八部分:常见问题处理
问题 1:重启后仍无法连接
排查步骤:
检查解锁服务是否执行成功:
1
systemctl --user status unlock-keyring.service
查看解锁日志是否有错误:
1
journalctl --user -t unlock-keyring --no-pager
确认密码文件内容正确:
1
cat ~/.local/share/keyring-unlock/.password
常见原因:
| 症状 | 原因 | 解决方法 |
|---|---|---|
| 服务状态为 failed | 密码错误或文件不存在 | 检查密码文件 |
| 日志显示”超时” | 密钥环守护进程未启动 | 检查 GNOME 会话是否正常 |
| 凭据仍为随机值 | 远程桌面服务未重启 | 手动执行脚本测试 |
问题 2:手动测试成功但重启后失败
可能原因:服务启动时机过早,密钥环还没准备好。
解决方法:编辑脚本,增加初始等待时间:
1 | nano ~/.local/bin/unlock-keyring.sh |
找到 sleep 2 行(在”额外等待确保密钥环完全初始化”注释后面),将其改为 sleep 5。
问题 3:忘记更新密码文件导致解锁失败
如果修改了登录密码但忘记更新密码文件,重启后解锁会失败。
解决方法:
正常登录系统(此时需要手动输入密码)
更新密码文件:
1
echo -n "新密码" > ~/.local/share/keyring-unlock/.password
重启验证
第九部分:完全回滚
如果你不再需要这个方案,或者想恢复到原始状态,可以完全回滚。
步骤 1:禁用服务
1 | systemctl --user disable unlock-keyring.service |
步骤 2:删除服务文件
1 | rm ~/.config/systemd/user/unlock-keyring.service |
步骤 3:重新加载 systemd
1 | systemctl --user daemon-reload |
步骤 4:删除脚本和密码文件
1 | rm ~/.local/bin/unlock-keyring.sh |
步骤 5:重启确认
1 | sudo reboot |
回滚后,系统恢复到原始状态:自动登录仍然有效,但远程桌面密码会在每次重启后随机变化。
命令速查表
为了方便日常使用,这里汇总了常用的命令:
1 | # === 状态检查 === |
总结
通过本教程,你已经成功解决了 Ubuntu 24.04 自动登录与远程桌面密码冲突的问题。
🎉 你获得了什么
- 开机即用:系统启动后自动登录桌面,无需干预
- 密码固定:远程桌面使用你设置的固定密码,不再随机变化
- 随时可连:从任何设备通过 RDP 远程访问你的 Ubuntu 桌面
- 系统干净:方案不修改任何系统文件,完全可逆
📁 创建的文件
| 文件 | 用途 |
|---|---|
~/.local/share/keyring-unlock/.password |
存储登录密码 |
~/.local/bin/unlock-keyring.sh |
解锁脚本 |
~/.config/systemd/user/unlock-keyring.service |
服务配置 |
⚠️ 请记住
- 修改登录密码后,必须同步更新密码文件
- 密码以明文存储,请确保机器有适当的物理安全保护
🔗 相关资源
希望这份教程对你有所帮助。如果你在配置过程中遇到任何问题,可以参考故障排查部分,或者查阅上述资源获取更多信息。
祝你远程办公愉快!🖥️