以上幾點在我在 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'
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 qvim -f
-H, --set-home set HOME variable to target user's home dir
-E, --preserve-env preserve user environment when running