2014-10-10

sudo mode editor gui can not switch the input method

Linux EDITOR 到底能不能在 sudo 狀態下輸入中文?Ctrl + Space 或者其它快速鍵就是不能切換輸入法?是 sudo 的問題還是輸入法的問題?

以上幾點在我在 Ubuntu + gedit + gcin 就存在的疑問,到轉用 Arch + qvim + hime 還是存在這問題,不禁想問,天啊,在 sudo 狀態下切換個輸入都就那麼難嗎?

編輯 sudoers 問題


介紹解法之前我們來先了解一個非常重要的問題點,  直接用 sudo vim/qvim/geidt 這類的文字編輯器來修改 /etc/sudoers 是好的嗎?普通我們都用這類方法來修改它,但這樣是沒有 debug 的功能,只要你有地方寫錯,很容易將 sudo 搞掛!若是,su 在當時沒設定密碼無法切換到 root,你就跟 root 說掰掰要修正也沒辦法沒權限嘛。

掰掰實例
>>> /etc/sudoers: syntax error near line 70 <<< sudo: parse error in /etc/sudoers near line 70 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin

關於 visudo 的 debug 可以看 @凍仁的: sudo 指令使用說明

那要修改它到底要用什麼指令呢?答案是 visudo 囉。

sudo visudo


通常 visudo 啟用的文字編輯器是 vi 那用不習慣要改怎麼辦?不用怕只要指定想要用的編輯器即可。

  •  修改 editor 為你想要的編輯器,若是 qvim/gvim 要記得加參數 -f 詳細作用請看此篇
    EDITOR="/usr/bin/vim"
    OR
    EDITOR="/usr/bin/qvim -f"'
    OR
    EDITOR='gedit'
這裡以 qvim 為範例
sudo EDITOR='/usr/bin/qvim -f' visudo

上面是暫時性的使用,要讓 visudo 以後都是用你指定的編輯器,請在執行 visudo 後編輯該檔添加下面那行文字。
Defaults      editor="/usr/bin/qvim -f", !env_editor

輸入法切換問題


那麼接下來就是切換輸入法的問題囉,這裡提供兩個解法,一個一樣用 visudo 來修改 sudoers ,另一個是每次用 sudo  都需要加入各別參數的解法。

sudo visudo

搜尋此行將開頭的#註解刪掉,或者直接添加此行。
Defaults env_keep += "HOME"
現在立即用測試 sudo 到底能不能切換輸入法囉。
sudo qvim

從圖片中用紅色框框處的差異來區別兩者的差異,兩者皆能正常切換輸入法輸入中文了。我用 hime 另外試過 ibus 都沒有問題。
沒用 sudo
有用 sudo
若是暫時性的請在 sudo 後面增加 -E -H 參數

sudo -E -H qvim -f

-H, --set-home              set HOME variable to target user's home dir
-E, --preserve-env          preserve user environment when running