logo头像

You name it , I got it !

筆記-自動啟用 fcitx & 啟用注音輸入法

最近工作上接了一個任務,要作一台ubuntu 18.04的client。
本來這也不是什麼大不了的事,不過呢(人生就是這個不過啊…)
前人寫好的ansible 腳本都是給 ubuntu 14.04 使用,有一些指令已經不適用於 18.04,所以乾脆整個重寫!
大部分的腳本都改得很順利,卡關的地方一如我所預期的,在輸入法、pin to dock、還有中文環境碰到一些問題

fcitx 的部份,一直找不到怎麼用console啟用輸入法的方式,找了好久,東拼西湊一些東西出來
大概整理一下,順便作個筆記

移除ibus
由於ubuntu 18.04預設使用ibus作為系統輸入法,所以後面雖然我啟用了fcitx
但是在系統設定內,一直都還是ibus,所以也就一直切不過去fcitx-chewing
最後想到乾脆移除掉ibus好了
作法有兩個
一個是乾脆直接把 ibus從系統移除

1
sudo apt remove ibus

`
另一個是修改每個user 家目錄底下的 .xinputrc

1
run_im fcitx

本來應該是用 im-config 去修改
但是我一直測試不出來…

1
2
3
4
5
6
7
8
9
im-config -o fcitx
Flexible Input Method Framework (fcitx)
* Required for all: fcitx
* Language specific input conversion support:
* Simplified Chinese: fcitx-pinyin or fcitx-sunpinyin or fcitx-googlepinyin
* Generic keyboard translation table: fcitx-table* packages
* Application platform support:
* GNOME/GTK+: fcitx-frontend-gtk2 and fcitx-frontend-gtk3 (both)
* KDE/Qt4: fcitx-frontend-qt42018-10-09 17:19:13

這邊只會看到有 Simplified Chinese的選項,不知道怎麼新增注音

Update
後來研究了一下,應該可以用來指定輸入法框架

1
im-config -n fcitx

其實這個指令就跟修改 .xinputrc 的意思一樣

這樣應該可以不用移除 ibus就可以啟用 fcitx

不過這邊沒辦法直接指定用注音、拼音之類的,不過我猜應該是可以才對

在 /etc/xdg/autostart 新增 fcitx-autostart.desktop

上面將預設輸入法改成了 fcitx
接下來要設定每次開機時,都要自動去執行 fcitx
這邊有很多種作法,可以用supervisord(砍柴用牛刀),可以用systemd的service(沒事用那麼好?)
後來看網路上提到可在 /etc/xdg/autostart內,新增一個 fcitx-autostart.desktop的檔案
內容如下

1
2
3
4
5
6
7
[Desktop Entry]
Name=fcitx
Terminal=false
Exec=/usr/bin/fcitx-autostart
Type=Application
Icon=/path/icon.png
Categories=Utility;

這樣子在每次執行gnome環境的時候,就會自動執行 fcitx-autostart這隻程式,把 fcitx帶起來
順帶一提,可以用 fcitx -d 來重新載入 fcitx

讓使用者登入的時候,自動啟用注音輸入法

就是在這邊卡了很久,基本的邏輯是在每個user的家目錄底下的 .config/autostart 新增一個檔案
內容如下

1
2
3
4
5
6
7
8
[Desktop Entry]
Name=fcitx
GenericName=fcitx
Comment=run vino after gnome session start
Exec=/usr/local/bin/fcitx.sh
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true

這樣的用意是當使用者「登入到gnome」之後,會去執行 /usr/local/bin/fcitx.sh 這支 script
而fcitx.sh這支script的內容如下

1
2
3
4
5
6
#!/bin/bash
USER=$(whoami)
DD=`date +%Y-%m-%d-%H-%M-%S`
/usr/bin/fcitx-imlist -e chewing
/usr/bin/fcitx-imlist -e cangjie5
echo $USER_$DD_executed >> /tmp/fcitx.run

最後一行可以不用管他,我用來debug用的
本來想說這樣應該就可以了,但是不知道為什麼,使用者登入之後,就是沒有去執行 /usr/local/bin/fcitx.sh
或者應該說,雖然有執行,但是沒有如預料的啟用 chewing/cangjie5這兩個輸入法
看一下 /var/log/syslog有什麼錯誤?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Oct  9 14:14:55 hqpc056 /usr/lib/gdm3/gdm-x-session[1233]: dbus-update-activation-environment: setting QT_IM_MODULE=fcitx
Oct 9 14:14:55 hqpc056 /usr/lib/gdm3/gdm-x-session[1233]: dbus-update-activation-environment: setting XMODIFIERS=@im=fcitx
Oct 9 14:14:55 hqpc056 /usr/lib/gdm3/gdm-x-session[1233]: dbus-update-activation-environment: setting GTK_IM_MODULE=fcitx
Oct 9 14:14:57 hqpc056 fcitx-imlist[1582]: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.fcitx.Fcitx-0 was not provided by any .service files
Oct 9 14:14:57 hqpc056 fcitx-imlist[1582]: g_ptr_array_foreach: assertion 'array' failed
Oct 9 14:14:57 hqpc056 fcitx-imlist[1582]: g_ptr_array_foreach: assertion 'array' failed
Oct 9 14:14:57 hqpc056 fcitx-imlist[1591]: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.fcitx.Fcitx-0 was not provided by any .service files
Oct 9 14:14:57 hqpc056 fcitx-imlist[1591]: g_ptr_array_foreach: assertion 'array' failed
Oct 9 14:14:57 hqpc056 fcitx-imlist[1591]: g_ptr_array_foreach: assertion 'array' failed
Oct 9 14:14:57 hqpc056 fcitx-imlist[1660]: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.fcitx.Fcitx-0 was not provided by any .service files
Oct 9 14:14:57 hqpc056 fcitx-imlist[1660]: g_ptr_array_foreach: assertion 'array' failed
Oct 9 14:14:57 hqpc056 fcitx-imlist[1660]: g_ptr_array_foreach: assertion 'array' failed
Oct 9 14:14:57 hqpc056 fcitx-imlist[1668]: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.fcitx.Fcitx-0 was not provided by any .service files
Oct 9 14:14:57 hqpc056 fcitx-imlist[1668]: g_ptr_array_foreach: assertion 'array' failed
Oct 9 14:14:57 hqpc056 fcitx-imlist[1668]: g_ptr_array_foreach: assertion 'array' failed
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: Fcitx seems is not running
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-unicode.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-ipcportal.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-table.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-kimpanel-ui.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-remote-module.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-chewing.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-lua.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-xkbdbus.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-clipboard.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-ipc.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-spell.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-x11.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-classic-ui.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-pinyin.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-vk.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-xim.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-keyboard.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-quickphrase.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-notificationitem.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-xkb.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-imselector.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-autoeng.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-chttrans.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-pinyin-enhance.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-dbus.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-punc.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-fullwidth-char.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 addon.c:151) Load Addon Config File:fcitx-freedesktop-notify.conf
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (ERROR-1735 ime.c:432) fcitx-keyboard-cm-mmuock already exists
Oct 9 14:14:59 hqpc056 fcitx-autostart.desktop[1592]: (INFO-1735 eim.c:104) Chewing storage path /home/dengm/.config/fcitx/chewing/
Oct 9 14:15:04 hqpc056 fcitx-config-gt[1827]: Failed to set text '第一個輸入法將作為非激活狀態。通常您需要將<b>鍵盤<b>或者<b>鍵盤 - <i>配置名稱</i></b>放到第一個。' from markup due to error parsing markup: Error on line 1 char 151: Element 'markup' was closed, but the currently open element is 'b'
Oct 9 14:15:04 hqpc056 fcitx-config-gt[1827]: Failed to set text '第一個輸入法將作為非激活狀態。通常您需要將<b>鍵盤<b>或者<b>鍵盤 - <i>配置名稱</i></b>放到第一個。' from markup due to error parsing markup: Error on line 1 char 151: Element 'markup' was closed, but the currently open element is 'b'

其實看前面的幾行就好了

1
2
3
4
5
6
7
8
9
10
11
12
Oct  9 14:14:57 hqpc056 fcitx-imlist[1582]: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.fcitx.Fcitx-0 was not provided by any .s    ervice files
116 Oct 9 14:14:57 hqpc056 fcitx-imlist[1582]: g_ptr_array_foreach: assertion 'array' failed
117 Oct 9 14:14:57 hqpc056 fcitx-imlist[1582]: g_ptr_array_foreach: assertion 'array' failed
118 Oct 9 14:14:57 hqpc056 fcitx-imlist[1591]: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.fcitx.Fcitx-0 was not provided by any .s ervice files
119 Oct 9 14:14:57 hqpc056 fcitx-imlist[1591]: g_ptr_array_foreach: assertion 'array' failed
120 Oct 9 14:14:57 hqpc056 fcitx-imlist[1591]: g_ptr_array_foreach: assertion 'array' failed
121 Oct 9 14:14:57 hqpc056 fcitx-imlist[1660]: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.fcitx.Fcitx-0 was not provided by any .s ervice files
122 Oct 9 14:14:57 hqpc056 fcitx-imlist[1660]: g_ptr_array_foreach: assertion 'array' failed
123 Oct 9 14:14:57 hqpc056 fcitx-imlist[1660]: g_ptr_array_foreach: assertion 'array' failed
124 Oct 9 14:14:57 hqpc056 fcitx-imlist[1668]: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.fcitx.Fcitx-0 was not provided by any .s ervice files
125 Oct 9 14:14:57 hqpc056 fcitx-imlist[1668]: g_ptr_array_foreach: assertion 'array' failed
126 Oct 9 14:14:57 hqpc056 fcitx-imlist[1668]: g_ptr_array_foreach: assertion 'array' failed

好吧,就算只看這幾行還是看不出個所以然,丟去餵 google
也是一堆看得霧沙沙的東西…
不過呢..看到DBus、看到freedesktop
我就在想,是不是因為在執行這隻程式的時候,gnome的視窗環境還沒有完整執行完畢
而fcitx-imlist 需要在完整的視窗下才能執行?

那是不是讓這隻程式晚一點再執行就可以解決呢?就來試試看吧!
修改一下上面提到的在每個user家目錄的 .config/autostart底下的 fcitx.desktop

1
2
3
4
5
6
7
8
9
[Desktop Entry]
Name=fcitx
GenericName=fcitx
Comment=run vino after gnome session start
Exec=/usr/local/bin/fcitx.sh
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true
X-GNOME-Autostart-Delay=10

加入最後一行的 X-GNOME-Autostart-Delay 讓這隻script在進入視窗後,等個10秒再執行
反正一般使用下,也不會在一進入視窗就需要切換到中文..
換個新的user登入看看,果然登入之後,就可以看到fcitx已經啟用了新酷音 chewing / 倉頡 cangjie5 這兩個輸入法了!
COOL!