标签 启动黑屏 下的文章

上次的解决方案中我们安装了 xinput 来解决问题,但还是存在疑问:为什么新安装的系统中会丢失 xinput 组件?以及为什么没有 xinput 的情况下 gdm3 可以正常启动?
让我们做个实验,删除 xinput 然后写一个脚本来替代它:

$ sudo apt remove xinput
$ sudo vim /usr/bin/xinput
# !/bin/sh
exit 0;
$ sudo chmod +x /usr/bin/xinput
$ sudo systemctl restart lightdm

一切正常,进入桌面没有发现任何异常,可见 xinput 已经被废弃了,而 unity-settings-daemon 源码没有及时更新。

在上面的解决方案中,我们实现一个什么事情都不做,仅仅返回 0 的程序。其实在我们的系统中就有这样一个程序,完全不需要自己写一个,那就是 /usr/bin/true,让我们来试一下:

$ sudo rm /usr/bin/xinput
$ sudo ln -s true /usr/bin/xinput
$ sudo systemctl restart lightdm

完美替代。

一年前,给新电脑安装了 Ubuntu Unity 21.04,近期,突然发现 apt install 总是报服务器连接不上的错误,开始还没太注意,后来才想到是系统过了支持期,正好 Ubuntu Unity 22.04 也发布了。那就装新系统吧。
自从 Unity 桌面失去官方支持以来,就成了小众的系统,安装镜像 iso 下载链接也只此一家别无分号,平时下载速度只能达到约 50k/s,还经常断,好在早上的时候下载速度比较快,3.6G 的镜像 7:07开始下载,7:57就下载完成。
将镜像安装到 U 盘,启动,进入到临时系统,诶!好像有哪里不对,怎么触摸板轻触无效?网上找了好久,都没有答案,也不知道该如何设置,好在触摸板重按还是能用的。
安装完,重启,进入 Ubuntu Unity 22.04,心情还有点小激动,看着屏幕上的日志消失,屏幕变黑,鼠标出现,等了好久,仍然只有一个鼠标。激动的心情瞬间跌落到谷底。尝试了网上的各种办法,甚至安装了 N 卡的驱动,但都无济于事。切换启动管理器为 gdm3,可以顺利登陆系统,但进入的是 Gnome 桌面,而不是我要用的 Unity 桌面,此方案不通。
于是硬着头皮去看日志。最后在 /var/log/lightdm/seat0-greeter.log 看到如下的记录:

(unity-settings-daemon:1247): xrandr-plugin-ERROR **: 17:58:37.966: Touchscreen mapping failed

虽然不清楚这条记录的含义是什么,但至少可以用来定位程序的代码,于是找到 unity-settings-daemon 进程的源代码,并在代码 plugins/xrandr/gsd-xrandr-manager.c 中找到字符串 “Touchscreen mapping failed”

$ grep "Touchscreen mapping failed" * -RIn
plugins/xrandr/gsd-xrandr-manager.c:2330:  g_error ("Touchscreen mapping failed");

打开文件 plugins/xrandr/gsd-xrandr-manager.c ,找到上文:

success = g_spawn_async (NULL,
            command,
            NULL,
            G_SPAWN_DO_NOT_REAP_CHILD,
            NULL,
            NULL,
            &(mapping_data->mapping_pid),
            error);

发现是调用一个 shell 命令失败,再向上找,发现:

command_str = g_strdup_printf ("/usr/bin/xinput --map-to-output %d %s",
            priv->main_touchscreen_id, name);

现在我们知道发生错误的命令是 /usr/bin/xinput,之前没了解过这个命令,先看看它是做什么用的

$ xinput
Command 'xinput' not found, but can be installed with:
sudo apt install xinput

原来 xinput 没有安装,难怪会报错,安装好 xinput 重启 lightdm

$ sudo apt install xinput
$ sudo systemctl restart lightdm

终于可以进入 Unity 桌面了。
Ubuntu Unity 22.04 桌面

这时如果你没有更新系统,那么触摸板仍然不可以轻点,只需更新系统即可:

$ sudo apt update && sudo apt upgrade
$ reboot

重启之后会发现,触摸板可以用了。打开触摸板设置,可以看到有了 轻触表示点击 的选项,并且选中。
触摸板设置
现在,可以正常登陆了,触摸板也正常了,系统安装告一段落了。