漏洞解决方法

漏洞解决方法

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

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

  • 使用Caps Lock用于快速切换;
  • 没有任何延误强加,我是一个快速打字的人;
  • 没有模式错误
    • (任意数量的)CapsLock集合英语,
    • (任意数量的)ShiftCapsLock集合乌克兰语;
  • 查看标准小部件中的当前布局。

我已经尝试了三个 (!) GUI 来配置它,Gnome 设置、、gnome-tweak-tooldconf-editorgsettings都不起作用。Tweaks随机崩溃。

做足功课

我也问过这个问题4年前14.04 LTS。从那时起,UI 弹出窗口就出现了,一切都崩溃了。现在我可以轻松配置有状态的 CapsLock切换,但即便如此,它还是会延迟,这让人很恼火。当我需要每句话切换 4-5 次语言时,它基本上无法使用。

此主题建议caps:none使用 XKB 选项作为错误解决方法。我尝试过,无论是使用gsettingsCLI 和dconf-editor,还是与 的组合grp:shift_caps_switchXKB 选项。没戏。似乎有些东西胜过了那些核心 XKB 功能。

此主题提供caps:menuXKB 选项,以便能够绑定CapsLockGnome Settings→ 设备 → 键盘。它有点用,但 A) 它提供循环/状态切换;B) 每次切换时我都必须等待相当长的超时时间。

此主题询问我到底需要什么,但却没有得到答复,甚至更糟:因为与另外两个问题重复而被关闭(???)这两个问题都不相同,也没有给我一个可行的解决方案。你们怎么了?

另一个完全匹配— 唉呀,也没有答案!


需求:清洁解决方案

答案1

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

在此处输入图片描述

我可以通过以下解决方法来实现此行为。

请参阅此链接观看 20 秒视频。https://i.stack.imgur.com/bFSTt.jpg

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

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()"

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()"

嗯,他们正在工作。

在此处输入图片描述

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

xbindkeys如果 xbindkeys 尚未安装,则可以通过以下方式安装sudo apt install xbindkeys

  1. .xbindkeysrc在 $HOME 文件夹中创建文件
    touch ~/.xbindkeysrc
  2. 要知道键码/ID,不管它叫什么,
    运行xbindkeys --key后出现白框按下Caps_Lock按钮,对按钮也执行此操作Shift,然后复制键码/ID,如下所示

在此处输入图片描述

  1. 此步骤是可选的。禁用 Caps Lock。参见下面的 gif。如果未禁用 Caps Lock,当您多次按下该键时,它会在您尝试更改语言时切换。我已将其禁用。但这取决于您的兴趣。

在此处输入图片描述

  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
  1. 保存文件,关闭并重新启动..

答案2

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

错误报告内容如下:

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

重现步骤:

  1. gnome-control-center 键盘
  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. 选择键 switch-input-source,关闭“使用默认值”,并将“自定义值”设置为['Caps_Lock']
  4. (可选)您还可以将 switch-input-source-backward 的值更改为 ['Caps_Lock'] 之类的值(再次关闭“使用默认值”)

解决方法 2

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

订阅错误报告

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

答案3

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

什里伍克(也可以从 GitHub 获取:madhead/shyriiwook)。这是一个 GNOME Shell 扩展,我是它的作者。

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

$ gdbus introspect \
    --session \
    --dest org.gnome.Shell \
    --object-path /me/madhead/Shyriiwook \
    --only-properties

node /me/madhead/Shyriiwook {
  interface me.madhead.Shyriiwook {
    properties:
      readonly as availableLayouts = ['us', 'de', 'jp'];
      readonly s currentLayout = 'us';
  };
};

$ gdbus call \
    --session \
    --dest org.gnome.Shell \
    --object-path /me/madhead/Shyriiwook \
    --method me.madhead.Shyriiwook.activate "de"

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

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

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

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

  • setxkbmap与 GNOME Shell 配合不佳(它不会更新状态区域中的语言,并且只是中断进一步的布局切换,直到下次重启)。
  • gsettings set org.gnome.desktop.input-sources current弃用,不再起作用
  • gdbus call … org.gnome.Shell.Eval …由于安全问题,也被弃用。

书呆子信息什里伍克基于 D-Bus,但它不使用不安全和弃用的版本,Eval也不使用任何替代方案。它使用重新实现类似的解决方案格杰斯通过直接访问相同内容getInputSourceManager

答案4

为了使用 [CapsLock] 切换语言,打开 Gnome Tweaks 工具(如果尚未安装,请安装)并检查“键盘和鼠标”\“其他布局选项”|“切换到其他布局”|“大写锁定”在此处输入图片描述

为了根除弹出窗口延迟,安装快速语言切换Gnome-shell 扩展可避免切换器弹出窗口并即时切换语言。此扩展未定义自定义快捷方式,因此X11 中所有带有gnome-tweak-tool/ 的自定义项或setxkbmap韦兰在所有 Gnome 版本上仍能正常工作。

笔记:该解决方案不能解决“模式错误”(即多次按下切换键时)。

免责声明:我是 Quick Lang Switch 的开发者...

相关内容