有没有办法从命令行更改 Cinnamon 中当前活动的键盘布局?
大多数指南建议的解决方案setxkbmap
并不像预期的那样有效:如果调用它,Cinnamon 中的语言指示器本身就会消失,并且 Cinnamon 中配置的现有组合不再起作用。要恢复此功能,必须转到设置并重新启用任何键盘布局设置。
此外,更改布局的方式setxkbmap
似乎比 Cinnamon 所期望的要低级:例如,如果您使用 将布局更改为非拉丁布局,则setxkbmap
整个系统中的默认组合键将停止工作。(使用 Ctrl-C 轻松测试)。在 Cinnamon 内部切换本机布局时从未发生过这种情况。似乎 的setxkbmap
运行级别低于大多数应用程序所期望的级别。
有没有办法改变原生的 Cinnamon(或者 gnome,因为它基于它?)布局并保持键盘组合正常工作?
(通常提出的另一种解决方案是gsettings set org.gnome.desktop.input-sources current 0
,但在当前的 Cinnamon 中也不起作用(什么都没有发生))。
当然,我已经测试了所有可能的索引,最多 10 个,尽管我目前只添加了 3 个布局。当手动更改布局时,提到的变量似乎也没有改变。我也尝试了 Cinnamon 环境中存在的类似变量,org.cinnamon.desktop.input-sources
但它也没有影响任何东西(与 gnome 版本完全相同)。
答案1
当前最好的解决方案是使用这个xkb-switch
接受命令行参数的外部程序()并将其编写成 xbindkeys 或类似程序的脚本。
虽然它是非官方的、外部的、并且用可编译语言编写的,但它实际上非常容易安装,因为它几乎没有依赖关系。
https://github.com/ierton/xkb-switch
$ xkb-switch --help
Usage: xkb-switch -s ARG Sets current layout group to ARG
xkb-switch -l|--list Displays all layout groups
xkb-switch -h|--help Displays this message
xkb-switch -v|--version Shows version number
xkb-switch -w|--wait [-p] Waits for group change and exits
xkb-switch -W Infinitely waits for group change
xkb-switch -n|--next Switch to the next layout group
xkb-switch [-p] Displays current layout group
用于:
xkb-switch -s us
xkb-switch -s de
etc...
此解决方案:
- 从命令行工作。
- 速度很快,调用此程序不会引入任何延迟(与切换布局相反
setxkbmap
)。 - 正确切换托盘图标区域中的内置布局指示器。(指示器不会像 一样消失或停止工作
setxkbmap
。) - 不会搞乱锁屏上的键盘映射,如果在锁定之前选择了错误的布局,则无法输入正确的密码(就像 一样
setxkbmap
)。 - 不会修改主要的组合键,如 Ctrl-C、Ctrl-V:即使在不同的布局下,它们仍然可以使用相同的键(不同于,你明白了
setxkbmap
)。 - 遵守所有 Cinnamon 布局机制,例如可以对所有窗口使用相同布局,也可以对每个窗口使用单独的布局。(猜猜看是否
setxkbmap
如此?)
安装说明在 Github 上。
答案2
您可以使用类似如下的方法:
setxkbmap ru,us
对于俄语布局,保留所有全局热键,如Ctrl + C
。
与单纯的 相比,变化的setxkbmap ru
是xkb_symbols
从 扩展{ include "pc+ru+inet(evdev)" };
为{ include "pc+ru+us:2+inet(evdev)" };
(用 进行检查setxkbmap ru -print
)。
因此,虽然不确定,但我猜想当ru
单独使用时,它会重置所有附加映射并按原样设置布局。同时,它ru,en
会将布局设置为俄语,但也会设置所有必要的全局键解释,这些解释取自美国布局。