一年前,给新电脑安装了 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 桌面了。
这时如果你没有更新系统,那么触摸板仍然不可以轻点,只需更新系统即可:
$ sudo apt update && sudo apt upgrade
$ reboot
重启之后会发现,触摸板可以用了。打开触摸板设置,可以看到有了 轻触表示点击 的选项,并且选中。
现在,可以正常登陆了,触摸板也正常了,系统安装告一段落了。