Настройка привязок клавиш gnome в функции Bash - PullRequest
0 голосов
/ 05 июня 2019

Я пишу сценарий Bash для автоматизации настройки привязки клавиш для моего рабочего стола Gnome. Смена ярлыка для уже существующих не проблема.

Проблема связана с сочетаниями клавиш костюма. Я могу жестко запрограммировать эти команды, и они будут отлично работать, но я не могу настроить привязки костюмов с помощью функции Bash.

Жестко запрограммированный фрагмент сценария будет выглядеть так:

gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/ name "vscode"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/ command "code"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/ binding "<Super>v"
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/']"

и, как я уже говорил, это будет работать.

Поэтому я попытался написать для этого функцию Bash:

# a function to create costume keybindings
# first arg: a number assigned to keybinding
# second arg: name of the keybinding
# third arg: command for the keybinding
# forth arg: the keyboard shortcut for the keybinding
function key {
    gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$1/ name $2
    gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$1/ command $3
    gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$1/ binding $4
    gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$1/']"
}

И я попытался использовать его следующим образом:

key 0 "poweroff" "poweroff" "<Shift><Super>s"
key 1 "reboot" "reboot" "<Shift><Super>r"
key 2 "keepassx" "keepassx" "<Super>k"
key 3 "calculator" "gnome-calculator" "<Super>c"
key 4 "vscode" "code" "<Super>v"
key 5 "toggle_touchpad" "/home/ali/p/os/scripts/gnome_toggle_touchpad.sh" "<Super>t"

Ни одна из указанных выше комбинаций клавиш не работает, кроме последней, toggle_touchpad.

Я подозревал, что, возможно, toggle_touchpad работает, потому что я предоставил полный адрес для него вместо команды. Поэтому я создал простой скрипт следующим образом:

#!/bin/bash
code

Этот скрипт работает, но когда я помещаю его в скрипт связывания клавиш, он не работает:

key 4 "vscode" "/home/ali/p/os/scripts/code.sh" "<Super>v"

Я не уверен, что не так с моим скриптом, но я думаю, что он как-то связан с последней строкой функции, поскольку конфигурация предыдущих трех строк появляется в dconf:

графический интерфейс dconf, показывающий настройку, связанную с привязкой клавиш костюма
enter image description here

Есть мысли?

1 Ответ

0 голосов
/ 05 июня 2019

Наиболее вероятная проблема заключается в том, что вы не цитируете переменные:

function key {
    gsettings set "org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$1/" name "$2"
    gsettings set "org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$1/" command "$3"
    gsettings set "org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$1/" binding "$4"
    gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$1/']"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...