再次使用 Caps Lock 进行无模式/无状态布局语言切换(18.04 LTS Bionic Beaver)

uli*_*tko 15 gnome keyboard-layout input-language accessibility 18.04

这已经被问过无数次了,所以我会尽量简短。

我有两种输入布局,乌克兰语和英语,并且想要:

  • 使用Caps Lock快速开关;
  • 没有任何延误,我打字快​​;
  • 没有模式错误
    • (任意数量)CapsLock套英语,
    • (任意数量)ShiftCapsLock套乌克兰语;
  • 查看标准小部件中的当前布局。

我已经尝试了三个(!)GUI 来配置它,Gnome 设置、gnome-tweak-tool、  dconf-editor/ gsettings。什么都行不通。Tweaks随机崩溃。

做足功课

我在4 年前为 14.04 LTS自己问过这个问题。从那以后,那个 UI 弹出窗口出现了,然后全部坏了。我现在可以轻松配置有状态 CapsLock切换,但即便如此,它也伴随着令人讨厌的延迟。当我需要每个句子切换 4-5 次语言时,基本上无法使用。

该线程建议将caps:noneXKB 选项作为错误解决方法。我已经尝试过使用gsettingsCLI 和dconf-editor,以及与grp:shift_caps_switchXKB 选项结合使用。没有骰子。看起来有些东西胜过那些核心的 XKB 功能。

这个线程提供caps:menuXKB选项作为一个黑客能够绑定CapsLockGnome Settings?设备 ?键盘。它有点工作,但是 A)它提供了循环/状态切换;B)我必须在每次切换时等待适当的超时。

该线程确切地询问了我需要什么,但它没有得到答复,甚至更糟:作为其他两个问题(???)的重复关闭,没有一个是相同的,并且没有一个给我一个可行的解决方案。你们怎么了?

还有另一个完全匹配- 唉,也没有答案!


想要:干净的解决方案

Win*_*nix 6

您可以订阅一个错误报告:

错误报告如下:

键盘面板有输入切换选项,但不允许使用大写字母作为语言切换。

重现步骤:

  1. 侏儒控制中心键盘
  2. 向下滚动到“打字”部分
  3. 单击切换到下一个输入源
  4. 按盖

预期结果:Caps Lock 键被接受为切换键 实际结果:Caps 键在选择窗口中被忽略。

PS 同样适用于“切换到上一个输入源”和 Shift-Caps 组合键。

错误解决方法

该错误目前在“愿望清单”中。建议采用以下变通方法:

解决方法 1

找到此错误的解决方法:

  1. 安装 dconf-editor (sudo apt-get install dconf-editor)
  2. 转到 /org/gnome/desktop/wm/keybindings/
  3. 选择key switch-input-source,关闭“Use default value”,设置“Custom value”为['Caps_Lock']
  4. (可选)您还可以将 switch-input-source-backward 的值更改为 ['Caps_Lock'] 之类的值(再次关闭“使用默认值”)

解决方法 2

另一种方法是: 1. 安装 GNOME Tweaks (gnome-tweak-tool) 2. 打开 Tweaks 应用程序 3. 切换到键盘和鼠标面板 4. 单击其他布局选项 5. 使用“切换到另一个布局”部分

订阅错误报告

我建议订阅错误报告并添加您自己的经验。订阅错误报告的人越多,解决方案出现的速度就越快(通常)。


UnK*_*OWn 6

在 Ubuntu 18.04 中,默认情况下有一个选项可以选择Caps_LockShift+Caps_Lock来实现我们正在寻找的行为,在gnome-tweaks. 但这不起作用,无法得到原因。

在此处输入图片说明

我可以通过以下解决方法设法实现这种行为。

有关 20 秒视频,请参阅此链接。https://imgur.com/QNdrVqa

首先检查终端中的以下命令是否正在更改输入语言。

gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[1].activate()"
Run Code Online (Sandbox Code Playgroud)

gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"
Run Code Online (Sandbox Code Playgroud)

好吧,他们正在工作。

在此处输入图片说明

我们需要将这些命令绑定到按键Caps_LockShift+Caps_Lock

可以做到这一点xbindkeys,如果xbindkeys还没有安装的安装sudo apt install xbindkeys

  1. .xbindkeysrc在 $HOME 文件夹中创建一个文件
    touch ~/.xbindkeysrc
  2. 要知道的键码/ ID它叫什么都
    运行xbindkeys --key一次的白框出现,按下Caps_Lock按钮,这样做的Shift按钮也并复制键码/ IDS,如下所示

在此处输入图片说明

  1. 这一步是可选的。禁用大写锁定。见下面的gif。如果没有禁用大写锁定......当您多次按下键时,它会在您尝试更改语言时切换。我已禁用它。但这是基于你的兴趣。

在此处输入图片说明

  1. 打开文件.xbindkeysrc
    gedit ~/.xbindkeysrc并根据上述步骤的结果编辑如下文件

根据您在上述步骤 2 中获得的结果更改以下内容中的值。内容:

"gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()""
m:0x10 + c:66

"gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[1].activate()""
Shift+Mod2 + Shift_L+m:0x10 + c:66
Run Code Online (Sandbox Code Playgroud)
  1. 保存文件,关闭并重新启动..

  • 天哪,它奏效了!我什至不需要注销,甚至重新启动(`xbindkeys --poll-rc`)。我还保留了 `grp:shift_caps_switch` XKB 选项——它改变了我的键码的打印方式(`m:0x0 + c:66` `ISO_First_Group` & `m:0x1 + c:66` `Shift + ISO_First_Group`);没有问题。连键盘 LED 灯都亮了!了不起的工作,你完全应该得到这个赏金。(gnome-tweaks 作者,无论他们是谁,都会从我和其他人那里得到一个脾气暴躁的皱眉。) (3认同)

mad*_*ead 1

满足您需求的清洁解决方案:

\n

Shyriiwook(也可在 GitHub 上找到:madhead/shyriiwook)。这是一个 GNOME Shell 扩展,我是它的作者。

\n

这是一个非常简单、简约的扩展。它没有任何 GUI。安装后,新的 D-Bus 接口将在您的 GNOME Shell 会话中公开。您可以查询它的当前配置或调用一个方法来激活所需的布局,就是这样:

\n
$ gdbus introspect \\\n    --session \\\n    --dest org.gnome.Shell \\\n    --object-path /me/madhead/Shyriiwook \\\n    --only-properties\n\nnode /me/madhead/Shyriiwook {\n  interface me.madhead.Shyriiwook {\n    properties:\n      readonly as availableLayouts = [\'us\', \'de\', \'jp\'];\n      readonly s currentLayout = \'us\';\n  };\n};\n\n$ gdbus call \\\n    --session \\\n    --dest org.gnome.Shell \\\n    --object-path /me/madhead/Shyriiwook \\\n    --method me.madhead.Shyriiwook.activate "de"\n
Run Code Online (Sandbox Code Playgroud)\n

这很容易编写脚本,您可以将此命令原始放入“设置”\xe2\x86\x92“键盘”\xe2\x86\x92“键盘快捷键”\xe2\x86\x92“查看和自定义”下的自定义快捷方式快捷方式” \xe2\x86\x92 “自定义快捷方式”。

\n

没有任何延迟,甚至不显示烦人的语言切换弹出窗口。

\n

它是完全无状态和幂等的。当您分配 D-Bus 调用(如上例中的最后一个调用)时,例如CapsLock次数的按键都会将语言设置为确定性值(示例中为德语)。

\n

它仅适用于最新的 GNOME 版本(我使用的是 42,但我也在 45 上进行了测试)。与互联网上提供的其他解决方案不同:

\n
    \n
  • setxkbmap与 GNOME Shell 的配合不太好(它不会更新状态区域中的语言,并且只会中断进一步的布局切换,直到下次重新启动为止)。
  • \n
  • gsettings set org.gnome.desktop.input-sources current被弃用并且不再工作
  • \n
  • gdbus call \xe2\x80\xa6 org.gnome.Shell.Eval \xe2\x80\xa6由于安全问题,该方法也已被弃用。
  • \n
\n

给书呆子的信息Shyriiwook基于 D-Bus,但它不使用不安全和已弃用的Eval或其任何替代方案。它通过直接访问GJS来重新实现类似的解决方案getInputSourceManager

\n


归档时间:

查看次数:

1084 次

最近记录:

6 年 前