
我意識到透過添加
setxkbmap xxx
我們可以更改 X 伺服器中的鍵盤佈局。它無法在登出/重新啟動後繼續存在,因此我們可以添加此行$HOME/.profile
以使其在登入時可用,如下所示這個問題描述。
但是,當我們這樣做時,在登入之前,鍵盤佈局仍然不可用。如果我們現階段想要使用它,該怎麼走呢?我在 Centos7 上使用 GDM。
我嘗試過的:
定義一個新的鍵盤佈局,命名為
symmetri
,並將其放在 下/usr/share/X11/xkb/symbols/
。為了測試,你可以下載它這裡。注意:我只定義了 X11 伺服器的佈局,尚未定義虛擬控制台的佈局。也許這就是為什麼我不能列出它locatectl list-keymaps
,既不loadkeys
,也不觸摸/etc/vconsole.conf
。setxkbmap symmetri
使用它。已套用更改。將其放入/etc/profile.d/symmetri.sh
用戶設定檔中以使用它。註銷,當我嘗試登入時,它停止工作並顯示 QWERTY。
我使用 QWERTY 登錄,然後我現在使用 Symmetri,因為腳本是在成功登入後取得的。
打開終端,我切換回
us
bysetxkbmap us
,
進而,
localectl set-x11-keymap symmetri
這次,佈局沒有切換。localectl set-keymap symmetri
兩者都不。
答案1
您可以使用
localectl set-x11-keymap ***
這對於控制台和桌面來說將是永久的,更詳細的配置可以在手冊頁上找到https://www.unix.com/man-page/centos/1/LOCALECTL/
答案2
@terdon你的解決方案不起作用,但感謝你幫助我,我學到了更多;一開始我也懷疑是不是跟Gnome有關係,結果發現只是X11而已。 @TimBrandrick,您的解決方案應該在大多數情況下都有效,但就我而言,不是在將鍵盤佈局添加到之前.../X11/xkb/rules/evdev.xml
(以防萬一.../X11/xkb/rules/evdev.lst
,因為根據某些來源,該lst
文件是 的編譯版本xml
,但我懷疑依賴這些文件的所有進程是否只會讀取文件;所以xml
我添加了這兩個文件xml
。lst
lst
所以,我是這樣做的:
1. 打開.../X11/xkb/rules/evdev.xml
.
(我省略了最初的部分,因為它在發行版之間有所不同。在 CentOS 7 中,它位於/usr/share/
; 在 Ubuntu <= 8.08 中,它位於/etc/
. 1 Strange 下。)
2. 在 的子節點末尾<layoutList>
加入這部分:
(根據需要修改,這只是一個模板)
<layout>
<configItem>
<name>symmetri</name>
<shortDescription>symmetri</shortDescription>
<description>Symmetri (CN, EN and ES)</description>
<languageList>
<iso639Id>us</iso639Id>
</languageList>
</configItem>
<variantList>
<variant>
<configItem>
<name>non-prog</name>
<shortDescription>non-prog</shortDescription>
<description>Symmetri for non-programmer (CN, EN and ES)</description>
<languageList>
<iso639Id>us</iso639Id>
</languageList>
</configItem>
</variant>
</variantList>
</layout>
如果您的鍵盤佈局沒有變體,<variantList>
則部分可以是自動關閉的,例如:<variantList />
。
注意:iso639Id
應具有與 ISO 639-1 或 639-2 標準相容的值。1參考文獻 1 中也給出了完整的表格。我設定English(U.S)
為我的系統語言,所以我us
在這裡填寫。
3.保存並打開.../X11/xkb/rules/evdev.lst
。
4. 在 的末端! layout
新增佈局的名稱。喜歡:
symmetri Symmetri layout (CN, EN and ES)
5. 如果您的鍵盤佈局有變體,請在 的末尾! variant
也添加它。
non-prog symmetri: non-programmer
變體的名稱應與 xml 檔案中的上述資訊一致。 (當我測試時,localectl list-x11-keymap-variants
會僅有的讀取此文件而不是讀取 xml,應該是一個錯誤/bug。
base.xml
6. 你可以對和執行同樣的操作base.lst
,但我先這樣做了,但不起作用。
7. 設定鍵盤佈局:
setxkbmap symmetri
或者,要設定變體,請使用:
setxkbmap symmetri -variant non-prog
localectl
可以list-x11-keymap-layouts
和list-x11-keymap-variants
,但不能用它來設定變體;只能setxkbmap
。
有了這個設置,現在重新啟動後和首次登入前,您有了新的鍵盤佈局(儘管該變體不會持續存在!只需要基本的佈局就可以了!)但是,一旦成功登錄,桌面管理器將接管,如果您沒有在$HOME/.bashrc
/ $HOME/.profile
(對於單一使用者)/ /etc/profile.d/xxx.sh
/ /etc/profile
(對於所有使用者)檔案中配置新的鍵盤佈局,您將不是登出並重新登入後即可獲得新的鍵盤佈局!所以這些改變將僅有的在第一次成功登入之前持續存在...您必須使用.bashrc
或設定檔腳本來告訴X伺服器:“不僅在登入之前,而且在登入之後我希望所有用戶都可以使用它!”注意:透過此更改,即使您登出並更改用戶,佈局也將是更改後的佈局,而不是qwerty(us)
.
真的令人沮喪......一定有一個更簡單的方法,但我找不到它。
參考資料:(必讀)