iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 16
0
自我挑戰組

M157q 的待業程式生活日誌系列 第 16

[2018 iThome 鐵人賽] Day 16: 解決 Arch Linux 上 gcin 2.8.5-2 無法在 Qt 5.9.x 以後的應用程式中執行的問題

  • 分享至 

  • xImage
  •  

TL;DR

在基於較新版qt 5.9.1的軟體中無法輸入中文


前言

qutebrowser 是一款以 Vim 操作流程為主、基於 PyQt5 上開發的的輕量化瀏覽器(有點類似 dwb)。2017 年中的時候就知道這款瀏覽器了,但沒有特別強烈的需求,因為我在使用 Firefox 或 Chromium 的時候都有安裝 Vimium 這個套件,所以可以做到一樣的事。

2017 年後半從 Firefox 55.0 開始,使用 Quantum 之後,我就從 Chromium 又跳回 Firefox 的懷抱,但接近 2017 年年底的時候,這篇文章:Firefox is on a slippery slope | Drew DeVault’s Blog,講到了 Firefox 和美國的 NBCUniversal "合作",為該公司新一季的電視劇 "Mr.Robot" 作宣傳。其手法是當你在瀏覽網頁的時候,如果裏面文字有和該劇相關的關鍵字的話,就會被倒過來顯示,而且也會在你造訪某些特定網站的時候,在你的 HTTP request 加入特定的 Header。重點是這是在未經使用者同意就預設開啟的測試功能內,直接幫使用者安裝一個叫作 "Looking Glass" 的 plugin,而且如果你把它關掉的話,在下次更新 Firefox 的時候又會被自動開啟。

再者是,討論這個功能的 ticket 是被鎖定的,只有 Mozilla 內部的人可以看到。這是非常不尊重使用者的行為,尤其 Firefox 又總是以不追蹤使用者、自由的開源軟體自居。雖然 Mozilla 在幾天後發了篇道歉文:Update: Looking Glass Add-on | The Firefox Frontier,但這件事還是讓滿多人留下不好的印象的,畢竟這代表專案主導人不尊重使用者,難保之後不會又發生。

剛好這篇文章的作者有提到他已經換到 qutebrowser 一陣子了,覺得還不錯用。剛好我也有在考慮要不要換過去使用,因為用了 Firefox 一陣子,雖然有比以前快,但還是常常會 crash,而且貌似也有 Memory Leak 的問題,常常用了一陣子記憶體就會愈用愈多,得重開才能解決。所以今天就下定決心拿 qutebrowser 來當預設的瀏覽器。

有機會的話可能會寫篇關於 qutebrowser 的介紹文,因為預設的 qutebrowser 其實不太好用,我花了點時間調整了設定才覺得比較能用。但這篇文章是要紀錄我在 Arch Linux 上安裝了基於 Qt5 開發的 qutebrowser 後,無法在其中使用 gcin 輸入法打中文字的問題。


正文

這篇應該只有在 Arch Linux 上的使用者可能會遇到,解法是在 gcin 論壇的這個討論串看到的:在基於較新版qt 5.9.1的軟體中無法輸入中文

先附上發生 bug 的軟體版本:

  • gcin 2.8.5-2
  • Qt 5.10.0
  • qutebrowser v1.0.4

步驟:

diff --git a/gcin/trunk/PKGBUILD b/gcin/trunk/PKGBUILD  
index ca08fcb57f3..7048c13411d 100644  
--- a/gcin/trunk/PKGBUILD  
+++ b/gcin/trunk/PKGBUILD  
@@ -39,6 +39,12 @@ prepare() {  
         -e '/^MODVERSION=/a INCS+=-I/usr/include/qt/QtGui/$(MODVERSION) -I/usr/include/qt/QtCore/$(MODVERSION)' \  
         -i qt5-im/Makefile  
  
+    # Patch to make gcin work in qt >= 5.9.x  
+    # ref: <https://hyperrate.com/thread.php?tid=33785>  
+      sed \  
+          -e 's/org.qt-project.Qt.QPlatformInputContextFactoryInterface/&.5.1/' \  
+          -i qt5-im/gcin-qt5.h.in  
+  
     # FS#45732  
     patch -p1 -i ../qt-5.5.patch  
  • 在該資料夾內下 makepkg -s 這個指令,就會開始 build gcin
  • build 好之後應該會出現 gcin-2.8.5-2-x86_64.pkg.tar.xz
  • 使用 sudo pacman -U gcin-2.8.5-2-x86_64.pkg.tar.xz 來安裝 patch 過後的 gcin
  • 使用 qtplugininfo /usr/lib/qt/plugins/platforminputcontexts/libgcinplatforminputcontextplugin.so 來檢查
    • 如果沒問題的話應該會得到下面這樣的輸出:
$ qtplugininfo /usr/lib/qt/plugins/platforminputcontexts/libgcinplatforminputcontextplugin.so  
IID "org.qt-project.Qt.QPlatformInputContextFactoryInterface.5.1" Qt 5.10.0 (debug)  
User Data: {  
    "Keys": [  
        "gcin"  
    ]  
}  
  • 重新開啟 gcin
  • 重開 qutebrowser

這樣應該就沒問題了。


結論

總之,我發了一個 bug report: FS#56949 : [gcin] gcin 2.8.5-2 cannot run in qutebrowser v1.0.4,希望這個 patch 會被加進去,這樣之後更新應該就沒問題了。

好像有點久沒有自己 build package 了啊,原本打算用 abs,然後才想起來 abs 已經被 deprecated 了:Arch Linux - News: Deprecation of ABS tool and rsync endpoint


參考來源


如果覺得我的文章不錯的話,
請幫我按讚、追蹤、訂閱、留言、分享,
有任何問題也都歡迎留言討論,
也可以利用像是 Feedly 等 RSS Reader,
直接訂閱我的部落格:https://blog.m157q.tw
iThome 這邊我應該只有鐵人賽的時候會使用。


上一篇
[2018 iThome 鐵人賽] Day 15: 嘗試在 Python 中做到 Golang fmt 的效果
下一篇
[2018 iThome 鐵人賽] Day 17: Linux 設定桌面環境預設開啟程式
系列文
M157q 的待業程式生活日誌31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言