sddm的奇怪问题
本文最后一次在 2019 年 11 月 22 日更新,部分内容可能已经过时!
在新的笔记本上头安装好Arch后,最近几次突然出现了个奇怪的问题:
系统检查完成后,sddm总是起不来。但系统是已经启动成功的,因为我可以切换到tty界面进行操作。但尝试在tty界面输入sddm
,却给我返回错误:
Failed to read display number from pipe
但是,通过systemctl restart sddm
重启一次服务,却又可以正常启动了,直到下一次重新启动需要再进行一次这个步骤。
真是头一次遇到这种问题……
后来在Archlinuxcn的群组里搜索了一番,看到了一个解释,说是熵不够。可以通过命令
cat /proc/sys/kernel/random/entropy_avail
来查看熵值。想要sddm启动需要差不多2000的样子。
我照做了。然后得到了刚启动时候的熵值:20
虽然到了也没明白为什么sddm启动要检查熵,但是这很明显差得太多了,那问题应该就是这里了。
有没有什么办法能提高熵的值呢?还真有。
pacman -S rng-tools
systemctl enable rngd
重启。
真好,刚启动就2700多了呢。
但是,对sddm启动的解决卵用也没有…
后来又看到一个,大概意思就是:
kabylake架构的CPU,要把驱动加入内核
来试一下:
- 安装intel驱动:
pacman -S xf86-video-intel
- 编辑
/etc/mkinitcpio.conf
,在MODULES=
的括号内增加intel_agp i915
- 重新生成initramfs。以防万一,先不做覆盖:
mkinitcpio -c /etc/mkinitcpio.conf -g /boot/linux-i915.img
- 重新启动。在grub处按 e 编辑启动项,将
initramfs-linux.img
位置更改为linux-i915.img
,按F10启动
啊…终于成功了。虽然熵才30多,但sddm也终于能一次起来了。
既然启动成功了,就可以把这个自定义的名称更改成initramfs-linux.img
并覆盖原先的镜像了。不过为了安全,把原先镜像做个备份大概也是有必要的。
不过,虽然解决这个问题了,但我到底也没闹清楚为什么这种架构的CPU要启用KMS,更不明白为啥提高熵也能解决一部分sddm卡住的问题…
不过还行,从解决到现在,驱动啥的都滚了几个版本了,找时间去掉这俩模块再试一下
进入TTY2手动启动sddm,得到信息如下:
Initializing...
Starting...
logind interface found
Adding new display on vt 1
Loading theme configuration from ""
Display server starting...
Running: /usr/bin/X -nolisten tcp -auth /var/run/sddm/{e4beed09-a27f-4c28-b69a-d00308c6565c} -background none -noreset -displayfd 16 -seat seat0 vt1
Failed to read display number from pipe
Display server failed to start.Exiting
我的重启sddm服务也没有用,提高熵的方法也没有用,请问你有没有思路如何处理。 ——