收集日常linux使用遇到的一些问题, 方便后续回顾

同一个相似的问题也可能会有多种可能性和解决方案

可视化相关

开机黑屏或无法进入桌面

/run/user/$(id -u) 权限问题

问题确认及解决方法

在黑屏界面按下键盘快捷键 Ctrl+Alt+F2/3/4/5/6 切换到到其他的终端 tty

输入用户名及密码进入终端

输入以下命令查询

sudo stat /run/user/$(id -u)

如果输出内容如下图:

主要看红框的UID及GID是否和当前用户一致,如果不一致则是因为该问题引起

确认是因为该问题引起的,修复命令如下:

sudo chown -R $(id -un):$(id -gn) /run/user/1000
sudo systemctl restart display-manager

执行完成后,正常情况可正常进入桌面环境

注:该方式只是临时修复,永久修复的方式,目前暂未去探索,因这问题不是百分百必现,故不浪费精力( 歪打正着能实现何晨光的电脑😁 )

问题原因

这里顺带整理了一下问题出现的原因

如果有精力,并且再次出现了,可以按照以下原因排查下

如果发现了其他原因可以评论,后续更新此文章方案

按正常情况,/run/user/1000 会在用户登录时systemd-logind 创建,属主应该是该用户(UID=1000)、权限 0700。重启后变成 root:root,基本就是被别的东西抢先用 root 建了,logind 再也不会去改它,从而造成错属主。

常见原因如下:

  • 被 tmpfiles 规则提前创建
    有人在 /etc/tmpfiles.d//usr/lib/tmpfiles.d/ 写了类似
    d /run/user/1000 0700 root root - 的条目,systemd-tmpfiles 开机就用 root 建出来了。

  • 启动脚本/服务抢先 mkdir
    某个 root 服务(自写脚本、容器启动脚本、显示管理器的自定义脚本等)在用户登录前 mkdir -p /run/user/1000

  • UID 不匹配/换了用户
    你的主账户 UID 不是 1000(或你改过 UID),但系统里某处仍硬编码 /run/user/1000,导致根用户创建了这个目录。

  • logind 未正常工作
    systemd-logind 没跑起来或 PAM 中 pam_systemd.so 没生效,导致不会为你创建/接管运行目录(较少见)。