【问题标题】:Switch to the needed keyboard layout by pressing Ctrl+Shift+[1,2,3,4] on Debian?在 Debian 上按 Ctrl+Shift+[1,2,3,4] 切换到所需的键盘布局?
【发布时间】:2021-04-13 06:36:22
【问题描述】:

简而言之。
我使用 Debian, xfce4 并且需要使用多个键盘布局(准确地说,我有 4 个)。我希望能够快速切换到我需要的那个,而无需多次按 Alt+Shift(或其他任何东西)。

我到底需要什么。
只需按 Ctrl+Shift+[布局编号] 即可切换到所需的布局。所以,就我而言,它会是这样的:

Ctrl+Shift+1 - 切换到俄语
Ctrl+Shift+2 - 切换到英语
Ctrl+Shift+3 - 切换到德语
Ctrl+Shift+4 - 切换到法语

一点提示:我不想多次按下某些组合键来获得我需要的布局(有时这有点麻烦,你知道), - 所以问题不在于这个 - 我可以自己做这个设置。重点是只需按其组合键一次即可获得所需的布局。

我已经尝试过了。
首先,我安装了xfce4-xkb-plugin,在面板上得到一个语言图标是可以的,但是它并没有让我为所有布局单独设置快捷方式。无论如何,现在它的设置 Manage layout 设置为 per application,如果重要的话。
我尝试使用命令setxkbmap ru 切换到俄语,但我得到的是一个完全损坏的布局切换器——我什至无法切换回英语。以前,我尝试过其他一些方法,几乎​​就像这个(不记得确切的命令), - 布局没有完全破坏,只有系统快捷方式被破坏了。所以我正在寻找一种干净的方法来做到这一点,没有任何缺点。有吗?

我将不胜感激。


更新。

我尝试了以下方法。

 setxkbmap -rules evdev -model pc104 -layout ru,us,de,fr -variant ,,nodeadkeys,nodeadkeys -option grp:lalt_lshift_toggle -option grp_led:scroll

一般来说,它似乎可以正常工作,但某些键盘快捷键仍然会丢失(如上所述)。原因可能是相同的字符在不同的布局中绑定到不同的键,而对于俄语,它使用西里尔字母,所以我的自定义快捷键在俄语布局中根本不起作用。到目前为止找不到解决方法。

【问题讨论】:

    标签: linux keyboard debian xfce


    【解决方案1】:

    以防万一以后有人遇到同样的问题,我正在回答我自己的问题。虽然它并不完美。我的解决方案是鸭带。好吧,至少它是一些东西。我最终得到了以下 bash 脚本。

    #!/bin/bash
    
    cur_layout=`cat /opt/scripts/layout_switcher/layout_value`;
    target_layout=$1;
    
    echo $cur_layout;
    echo $target_layout;
    
    if (( $cur_layout < $target_layout )); then
      switch_count=$(($target_layout-$cur_layout));
    elif (( $cur_layout > $target_layout )); then
      switch_count=$((4-$cur_layout+$target_layout));
    else
      switch_count=0;
    fi;
    
    echo $switch_count;
    
    echo "$target_layout" > /opt/scripts/layout_switcher/layout_value
    
    for (( c=1; c<=$switch_count; c++ ))
    do
       xdotool key Mode_switch
    done;
    

    解释我想做什么。我创建了 2 个文件:一个是上面的脚本,另一个是 /opt/scripts/layout_switcher/layout_value,如该脚本中所述,后者存储当前布局值。是的,我决定将布局值存储在一个文件中,并在登录系统时将其全部重置。所以有第三个文件可以重置它,这里是:

    #!/bin/bash
    
    echo "2" > /opt/scripts/layout_switcher/layout_value
    
    setxkbmap -rules evdev -model pc104 -layout ru -variant ,nodeadkeys,nodeadkeys, -option grp:lalt_lshift_toggle -option grp_led:scroll
    sleep 1
    setxkbmap -rules evdev -model pc104 -layout us,de,fr,ru -variant ,nodeadkeys,nodeadkeys, -option grp:lalt_lshift_toggle -option grp_led:scroll
    
    

    详细解释

    我给每种语言一个序列号,它被用作语言标识符。
    所以对于俄语我有1,对于英语2,对于德语3,对于法语4。并且这个值保存在/opt/scripts/layout_switcher/layout_value中。

    在启动或登录时,默认值 2(即英语)会保存到该文件中,setxkbmap 会设置一个新的键盘映射,其中英语优先。但是,如果没有sleep,我无法让它工作,所以它是非常胶带。 :) 但仅针对出现问题的情况。

    于是系统启动了。现在我使用第一个脚本并在按下键盘快捷键时调用它。我都是在标准键盘设置中设置的,没什么特别的。

    因此,正如我在问题中所述,我将 Ctrl+Shift+[1,2,3,4] 绑定到主 bash 脚本(第一个)。而且,我有以下方案:

    • Ctrl+Shift+1 - /bin/bash /opt/scripts/layout_switcher/layout_switcher.sh 1
    • Ctrl+Shift+2 - /bin/bash /opt/scripts/layout_switcher/layout_switcher.sh 2
    • Ctrl+Shift+3 - /bin/bash /opt/scripts/layout_switcher/layout_switcher.sh 3
    • Ctrl+Shift+4 - /bin/bash /opt/scripts/layout_switcher/layout_switcher.sh 4

    所以,基本上,它所做的就是调用那个 bash 脚本并传递一个参数,这个参数是布局序列号。脚本接受它并根据当前和目标布局序列号计算偏移量,即必须模拟语言切换的次数。 :) 就如此容易。我没有想出更聪明的办法。因此,如果我使用德语 (3),并且我想要英语 (2),它会计算 4-3+2=3,因此必须模拟语言切换 3 次(如果我的布局优先级英语正好在德语之前)。目标布局编号保存在文件中。

    一切都好,但这不适用于Alt+Shift 切换,当前值不会更新。但对我来说这是可以接受的,因为我根本不会使用Alt+Shift。为了防止出现任何问题并且我不小心按了Alt+Shift,我将另一个快捷方式绑定到重置脚本。

    Ctrl+Shift+0 - /bin/bash /opt/startup_scripts/layout_reset.sh

    如果我的语言与鸭子磁带不同步,它会强制重置为英语。

    还有一件事我需要忍受:为了让这一切正常工作,我必须切换到全局语言模式(从应用程序模式)。因此,如果我在一个应用程序中使用英语,我将在其他任何地方使用它,直到我切换到其他应用程序。每个应用程序或窗口没有单独的语言。

    而且,如您所见,我使用 xdotool 来模拟(即触发)布局切换。因此,如果您还没有安装它,还有一个要安装的软件包。

    所以,这是一个鸭式磁带解决方案,但我又不是系统管理员,我只有基本的了解。也许你知道更好的方法,那么请告诉我。

    PS: 是的,我也阅读了有关 xkb-switch 解决方案的信息,但它不在 Debian 存储库中(至少目前如此),我无法自己检查,无论我是否可以相信与否。所以,我决定不冒险安装我既无法理解也无法验证的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多