Использование клавиши меню в качестве модификатора в X

Если все Ubuntu 12.04 x86 имеют одинаковые адреса, это, скорее всего, связано с тем, что все они поставляют одну и ту же сборку Linux. Если вы используете современную версию GCC с включенной оптимизацией для компиляции вашего собственного ядра, он будет рандомизировать ваши адреса для каждой сборки.

На самом деле, это даже не нужно для последних ядер. Начиная с этого коммита (январь 2014 г.), адресное пространство ядра на архитектурах x86 даже изменяется при каждой загрузке с помощью механизма, называемого случайным выбором макета адресного пространства ядра: http://lwn.net/Articles / 569635 / .

Итак, обновите свой дистрибутив или перекомпилируйте ядро, и у вас должны быть рандомизированные адреса.

Что касается последствий, если вы позволите компилятору или процессу загрузки ядра выполнить свою работу, их не будет. Если вы попытаетесь настроить сборку после компиляции, наиболее вероятным результатом будет то, что вы не сможете ее загрузить или, что еще хуже, она выйдет из строя в случайном порядке. Другим практическим следствием пост-обработки вывода компилятора является то, что вы не сможете подписать ядро ​​во время процесса компиляции (что необходимо, например, для надежной загрузки).

1
23.10.2018, 11:52
1 ответ

Необходимые компоненты :xmodmap, xcape, xbindkeys.

xmodmap -e "keycode 135 = Hyper_R"
xmodmap -e "add mod3 = Hyper_R"
xmodmap -e "keycode any = Menu" # this is needed for xcape
xcape -e "Hyper_R=Menu" # for single key press on menu key

~/.xbindkeysrc:

# map Menu+Pause as Mute
"xdotool keyup Hyper_R keyup Pause key --clearmodifiers XF86AudioMute keydown Hyper_R key Control"
    Mod3 + Pause

# map Menu+PgUp as Volume+

"xdotool keyup Hyper_R keyup Prior key --clearmodifiers XF86AudioMute keydown Hyper_R key Control"
    Mod3 + Prior

# etc. 

Причиной такого сложного xdotoolвызова является:

  1. keyup Hyper_R keyup Pause-ключи необходимо очистить,в противном случае XF86AudioMute отправляется при их нажатии и не распознается как одиночное нажатие клавиши
  2. keydown Hyper_R-чтобы комбинированную клавишу (Пауза в этом случае )можно было нажать несколько раз, полезно для XF86AudioRaiseVolumeнапример
  3. key Control-чтобы xcape не обнаруживал подделку keydown Hyper_Rи последующее отпускание настоящей клавиши, чтобы избежать срабатывания меню функции

xdotoolsвызовы могут быть внешними для некоторых bash-скриптов, например:

#!/bin/bash

case "$1" in
"up")
    KEY="XF86AudioRaiseVolume"
    SHORT="Prior"
    ;;
"down")
    KEY="XF86AudioLowerVolume"
    SHORT="Next"
    ;;
"mute")
    KEY="XF86AudioMute"
    SHORT="Pause"
    ;;    
"next")
    KEY="XF86AudioNext"
    SHORT="End"
    ;;
"prev")
    KEY="XF86AudioPrev"
    SHORT="Delete"
    ;; 
"playpause")
    KEY="XF86AudioPlay"
    SHORT="Insert"
    ;;        
"stop")
    KEY="XF86AudioStop"
    SHORT="Home"
    ;;            
esac

xdotool keyup Hyper_R keyup $SHORT key $KEY keydown Hyper_R key Control
1
28.01.2020, 00:24

Теги

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