立夏 发布的文章

Linux 下的输入法选择真的不多。以前 Linux 自带的输入法根本就不好用,直到搜狗拼音 Linux 版本的出现。

搜狗拼音 Linux 版本的确很好用,但问题也很明显,占内存太大了。使用时间一长,内存就都占满了。当时电脑是 8G 的内存,系统和其他应用也就占 3G 左右的内存,其余都被搜狗输入法占用了。经常是电脑用着用着,就变得非常卡,几乎不可操作,鼠标的移动都存在延迟。此时如果不想重启,唯一能做的就是 ALT+CTRL+F1-F6,启动 tty1-6 控制台,输入用户名,密码登陆,但也要看运气,经常是用户名输入完了,控制台光标闪烁一阵,重启了,再一次重新输入用户名,基本上 10 分钟一般都能登陆了,然后找到搜狗输入法的进程,杀掉,电脑又恢复正常了。为避免电脑卡到无法操作的地步,一般来说有两个办法:
1、打开系统监视器,随时查看内存占用,一旦情况不好就直接杀掉搜狗进程;
2、开机时就登陆一个 tty1-6 控制台,这样可以在系统卡的时候快速进入到控制台,而不用等 10 分钟。

去年,给电脑装 Ubuntu Unity 21.04 时,找到了百度输入法 Linux 版,但官网上只明确表示支持到 Ubuntu 19.10,不过在 21.04 上也可以正常安装,只是电脑重启之后,大概十次仅有一次可以正常使用,体验和搜狗差不多;其余的几次是无法进行输入操作的,输入法候选词列表有时不显示,有时是显示其它输入法的候选词列表,但候选词列表却是乱码。

最近安装了 Ubuntu Unity 22.04 之后,发现系统自带的输入法 IBus 智能拼音 1.12.1 也已经很好用了。
候选词列表.png

关于,版权处有点小失误。
IBus 智能拼音 1.12.1.jpg

对于拼音输入法来说,模糊音是必不可少的功能。
IBus 智能拼音2.jpg

就综合体验来说,比起上面的搜狗和百度好很多了。
当然也还有瑕疵,就是输入法候选词列表的位置经常跑到屏幕外面去,可能是高清屏还没有作适配。

一年前,给新电脑安装了 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

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