Как установить пользовательские сочетания клавиш с терминала?

На форумах Ubuntu есть сообщение о защите записей паролем, в основном для того, чтобы восстановить элементы меню восстановления, чтобы вы входили в качестве супермена с паролем 1234, вам нужно отредактировать некоторые очень волосатые файлы config / script:

Добавить в /etc/grub.d/00_header

cat << EOF
set superusers="superman"
password superman 1234
password bill 5678
EOF 

Добавить в /etc/grub.d/00_header

От:

printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"

To:

if ${recovery} ; then
   printf "menuentry '${title}' --users superman ${CLASS} {\n" "${os}" "${version}"
else
   printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
fi 

Совершенствование защиты сильно затруднено

Другие вещи, которые вам нужно сделать, это защитить ваш биос паролем, отключить загрузку из чего-либо другого, кроме первичного жесткий диск и зашифровать свой корневой раздел и установить любой другой раздел как noexec. Это все еще оставляет много векторов.

1
задан 16 October 2017 в 11:54

5 ответов

Все пользовательские настройки быстрых клавиш хранятся в базе данных dconf.

Вы можете легко получить к ним доступ с помощью dconf-editor:

sudo apt-get install dconf-editor

Затем перейдите к следующему пути dconf в редакторе:

/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/

8
ответ дан 23 May 2018 в 22:21
  • 1
    Является ли местоположение одинаковым для всех версий Linux? Или, по крайней мере, все версии Ubuntu? – Anonymous Platypus 16 March 2015 в 15:42
  • 2
    @AnonymousPlatypus: это расположение настроек с 14.04 (я не могу сказать для другого дистрибутива) – Sylvain Pineau 16 March 2015 в 15:47
  • 3
    Окей. Большое спасибо за это :) – Anonymous Platypus 16 March 2015 в 16:35
  • 4
    Это графический метод, а не терминальный – Anandu M Das 17 March 2015 в 12:56
  • 5
    Что мне делать, если у моего ключа медиа-ключей нет подменю для пользовательских клавиш? – Brandon Kuczenski 27 June 2015 в 23:53

Существует простой способ сделать это с помощью dconf:

dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/command "'move-window.sh'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/binding "'<Primary><Alt>Page_Down'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/name "'move-window'"

Использование gsettings:

gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name "'move-window'"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding "'<Primary><Alt>Page_Down'"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command "'/usr/local/bin/move-window.sh'"

Вам нужно увеличить число в [ f5] для добавления дополнительных привязок, т.е. custom1, custom2 и т. д.

Чтобы сделать его постоянным, просто добавьте его в .bash_profile или похожий скрипт, запускаемый командами входа. Просто не делайте этого для не-login shells .bashrc, потому что по моему опыту эти dconf и gsettings значительно замедляют его. Изменение / добавление 30 привязок занимает второе место! Вы не хотите этого в оболочке без входа (.bashrc)!

8
ответ дан 23 May 2018 в 22:21

Добавление сочетаний клавиш из командной строки в 12.04

Чтобы предотвратить принятие слишком широкого ответа, добавьте отдельное решение для 12.04.

До (и включая) 12.04, пользовательские привязки клавиш не хранятся в базе данных dconf, а в ~/.gconf/desktop/gnome/keybindings (в файле xml, в подпапках, таких как custom0 и т. д.).

Сценарий ниже создает файл xml и его папку containg, автоматически именованные правильно.

Как использовать

Вставить сценарий в пустой файл, сохраните его как set_customshortcuts_12.py Запустите его с помощью команды:
python /path/to/set_customshortcuts_12.py <name> <command> <key1> <key2> <key3>
key3 является необязательным, команды могут быть, например:
python /path/to/set_customshortcuts_12.py run_browser firefox Primary 7 
или
python /path/to/set_customshortcuts_12.py run_texteditor gedit Primary Alt 3 

Примечания

note что именование ключей отличается от редактирования gsettings. Насколько мне известно, ключи названы так, как они отображаются в «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Я протестировал скрипт 12.04 под VirtualBox; ему необходимо было выйти из системы, чтобы изменения произошли.
#!/usr/bin/env python
import os
import sys

home = os.environ["HOME"]
name = sys.argv[1]
command = sys.argv[2]
keys = sys.argv[3:]

keyfile = [
    '<?xml version="1.0"?>',
    '<gconf>',
    '\t<entry name="action" mtime="1427791732" type="string">',
    '\t\t<stringvalue>'+command+'</stringvalue>',
    '\t</entry>',
    '\t<entry name="name" mtime="1427791732" type="string">',
    '\t\t<stringvalue>'+name+'</stringvalue>',
    '\t</entry>',
    '\t<entry name="binding" mtime="1427791736" type="string">',
    '\t</entry>',
    '</gconf>',
    ]

if len(keys) == 2:
    keyfile.insert(9, '\t\t<stringvalue>&lt;'+keys[0]+'&gt;'+keys[1]+'</stringvalue>')
else:
    keyfile.insert(9, '\t\t<stringvalue>&lt;'+keys[0]+'&gt;&lt;'+keys[1]+'&gt;'+keys[2]+'</stringvalue>')

n = 0
while True:
    check = home+"/"+".gconf/desktop/gnome/keybindings/custom"+str(n)
    if os.path.exists(check):
        n = n+1
    else:
        newdir = check
        newfile = check+"/"+"%gconf.xml"
        break

os.makedirs(newdir)
with open(newfile, "wt") as shortcut:
    for l in keyfile:
        shortcut.write(l+"\n")
5
ответ дан 23 May 2018 в 22:21

Вы можете установить новый пользовательский ярлык без скрипта python, используя sed. Вам просто нужно установить имя, привязку и действие по вашему выбору в следующем скрипте:

name="myaction"
binding="<CTRL><ALT>v"
action="/usr/local/bin/myaction"

media_keys=org.gnome.settings-daemon.plugins.media-keys
custom_kbd=org.gnome.settings-daemon.plugins.media-keys.custom-keybinding
kbd_path=/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/$name/
new_bindings=`gsettings get $media_keys custom-keybindings | sed -e"s>'\]>','$kbd_path']>"| sed -e"s>@as \[\]>['$kbd_path']>"`
gsettings set $media_keys custom-keybindings "$new_bindings"
gsettings set $custom_kbd:$kbd_path name $name
gsettings set $custom_kbd:$kbd_path binding $binding
gsettings set $custom_kbd:$kbd_path command $action
0
ответ дан 23 May 2018 в 22:21

Написал сценарий для этого. См. Ниже.

См. Использование в вызове creatShortcut.

export nextShortcutId=0
function creatShortcut() {
    name="$1"
    commandToRun="$2"
    binding="$3"
    path="/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${nextShortcutId}"
    nextShortcutId=$nextShortcutId+1
    dconf write "$path/name" "'""$name""'"
    dconf write "$path/command" "'""$commandToRun""'"
    dconf write "$path/binding" "'""$binding""'"
}

# dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/binding '"<Primary><Shift>exclam"'
creatShortcut 'copyq show' 'copyq show' '<Primary><Shift>exclam'
creatShortcut 'System Monitor' 'gnome-system-monitor' '<Primary><Alt>m'
creatShortcut 'Suspend' 'systemctl suspend -i' '<Super>d'
creatShortcut 'Volume Up' 'amixer -D pulse sset Master 5%+' '<Super>Page_Up'
creatShortcut 'Volume Down' 'amixer -D pulse sset Master 5%-' '<Super>Page_Down'

overallbindings=""
for ((i = 0 ; i < $nextShortcutId ; i++ ));
do
    overallbindings="$overallbindings, '$customindingPathPrefix$i/'"
done
overallbindings="[${overallbindings:2}]" # Delete the first 2 chars: " ," - space and comma
# echo $overallbindings

# Update the list of bindings for the shortcuts to work
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings "$overallbindings"
# dconf write /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/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/']"
0
ответ дан 23 May 2018 в 22:21

Другие вопросы по тегам:

Похожие вопросы: