AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1233966
Accepted
lucidbrot
lucidbrot
Asked: 2020-05-02 06:47:32 +0800 CST2020-05-02 06:47:32 +0800 CST 2020-05-02 06:47:32 +0800 CST

如何在 Ubuntu 18.04 中使用 GNOME3 从 bash 脚本设置自定义键盘快捷键?

  • 772

与2012的这个问题类似,我正在寻找一种方法来自动设置组合键,该组合键应该触发命令的执行,就像在 gui 中设置它一样。(示例用法)

我在 Ubuntu 18.04 上,链接答案的 gsettings 架构似乎不存在:

$ gsettings list-schemas | grep keyboard
org.gnome.settings-daemon.plugins.keyboard
org.gnome.settings-daemon.plugins.a11y-keyboard
org.gnome.shell.keyboard
org.gnome.settings-daemon.peripherals.keyboard
org.gnome.libgnomekbd.keyboard
com.canonical.indicator.keyboard
org.gnome.desktop.peripherals.keyboard
org.gnome.desktop.a11y.keyboard

我如何使用 bash 来设置它,就像我进入 GNOME GUISettings > Devices > Keyboard并手动设置它一样? 显示 GUI 中的设置的示例图像

shortcut-keys ubuntu-gnome 18.04
  • 3 3 个回答
  • 1447 Views

3 个回答

  • Voted
  1. Best Answer
    lucidbrot
    2020-05-02T13:05:03+08:002020-05-02T13:05:03+08:00

    评论后

    不太容易。您需要在[call]
    中为快捷键声明一个文件夹,然后在. 在该文件夹中,“绑定”、“命令”和“名称”键定义了自定义快捷键。不确定如何使用命令轻松完成(尤其是第一步)。–钒org.gnome.settings-daemon.plugins.media-keyscustom-keybindings/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/

    我查看了以下链接:

    • 如何在 Linux Mint 上向空模式添加密钥
    • Gsettings 架构类型
    • 创建模式
    • gsettings 的 set 命令中的数组操作

    我的笔记本电脑已经使用 GUI 进行了设置,我运行了一些查询以了解我应该瞄准什么输出。

    $ gsettings list-relocatable-schemas | grep keybin
    org.gnome.settings-daemon.plugins.media-keys.custom-keybinding
    org.gnome.orca.keybinding
    
    ## I have two shortcuts
    $ gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings
    ['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']
    
    $ gsettings get org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ binding
    '<Primary><Super>Left'
    
    $ ls /opt
    confinedrv  virtio-win.iso  workspace_shortcut_send_to_next.sh
    generic@motorbrot:~/Downloads/iso.new$ gsettings get org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ command
    'wmctrl -r :ACTIVE: -t 0'
    
    $ gsettings get org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ name
    'send to first workspace'
    

    在我的测试设备上(不同于以前的笔记本电脑),查询org.gnome.settings-daemon.plugins.media-keys custom-keybindings返回一个空字符串数组 ( @as [])。

    在我的测试设备上,我尝试设置绑定:

    $ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ binding '<Primary><Super>Right'
    No such schema "org.gnome.settings-daemon.plugins.media-keys.custom-keybindings"
    '<Primary><Super>Left'
    

    在/usr/share/glib-2.0/schemas/org.gnome.settings-daemon.plugins.media-keys.custom-keybindings.gschema.xml测试设备上是为org.gnome.settings-daemon.plugins.media-keys.custom-keybinding(没有尾随 s)定义的模式。在那里我可以看到 , 和 的类型name都binding用于command字符串s。所以我删除了结尾的 sid但不是path现在设置并再次查询它们有效。

    $ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding '<Primary><Super>Right'
    $ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name 'move to first wirkspace'
    $ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command 'wmctrl -r :ACTIVE: -t 0'
    $ gsettings get org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding
    '<Primary><Super>Right'
    

    然后,我将自定义命令路径添加到以前的空列表中。(我认为这会覆盖整个列表,所以要小心!)

    gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']"
    ## make sure the path starts and ends with a slash
    gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings 
    "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']"
    

    r我通过进入按下时出现的弹出窗口继续重新加载 gnome AltF2。

    我将一个窗口移动到第二个工作区并尝试它是否有效。它没有 - 没有任何反应。
    我将命令更改为echo test > ~/testing.txt并再次尝试,但仍然 - 没有任何反应。该文件未创建。

    这里的问题与我使用 GUI 的链接示例用法相同:

    如果快捷方式不能以这种方式工作,但从终端运行时该命令有效,请将其保存在文件中/fullpath/myfile.txt并设置bash /fullpath/myfile.txt为快捷方式命令。这应该适用于 Gnome 和 Xfce。

    • 1
  2. J.Dubbs
    2021-06-18T20:18:25+08:002021-06-18T20:18:25+08:00

    为此,我编写了一个脚本。如果尝试覆盖现有的默认快捷方式,它将失败而不会打印错误。

    
    #!/bin/bash
    
    # Set a Keyboard Shorcut in Gnome
    # Example invocation:
    #   add_keyboard_shortcut "MyShortcut 0" "gedit" "F8"
    
    has_gsettings=$(which gsettings)
    if [[ ! -z "$has_gsettings" ]]; then
      function add_keyboard_shortcut ()
      {
        existing_shortcut_string=$(gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings)
        exst_str_len=$((${#existing_shortcut_string}))
        if (( $exst_str_len  %s' "$1" "$2"
          # Assign bindings
          gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$new_shortcut_index/ name "$1"
          gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$new_shortcut_index/ command "$2"
          gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$new_shortcut_index/ binding "$3"
          # Declare the new binding
          gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "${declaration_string}"
        else
          printf "\n\nYou are missing input arguments.\n\nThis command requires 3 arguments...\n\nSyntax is add_keyboard_shortcut 'Name' 'Command' 'Shorcut'\n\n\nFor example\n\n  add_keyboard_shortcut 'Open Nautilus' 'nautilus' 'F3'\n\n\n\n\n\nCommon Key Abbreviations:\n\n";
          printf 'Super key:                 \nControl key:                or \nAlt key:                   \nShift key:                 \nnumbers:                   1 (just the number)\nSpacebar:                  space\nSlash key:                 slash\nAsterisk key:              asterisk (so it would need `` as well)\nAmpersand key:             ampersand (so it would need  as well)\n\na few numpad keys:\nNumpad divide key (`/`):   KP_Divide\nNumpad multiply (Asterisk):KP_Multiply\nNumpad number key(s):      KP_1\nNumpad `-`:                KP_Subtract\n\n\n\nList all gsettings keys:\n  gsettings list-recursively';
          return -1;
        fi
      }
    fi
    
    
    • 0
  3. panticz
    2022-06-11T13:07:32+08:002022-06-11T13:07:32+08:00

    这里是一个示例如何创建键盘快捷键以通过<Super> + p按键暂停系统:

    gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']"
    gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name 'suspend'
    gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command 'systemctl suspend'
    gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding '<Super>p'
    
    • 0

相关问题

  • 如何将字符映射到组合键?

  • 如何为所有应用程序(系统范围)禁用 Ctrl+Q?

  • 有哪些有用的键盘快捷键?[关闭]

  • 如何在 Ubuntu 中眨眼间显示桌面?[关闭]

  • 输入语言切换键只接受 shift-alt 而不是 alt-shift [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve