¿Cómo hacer que las teclas Hyper y Super no hagan lo mismo?

¿Cómo hacer que las teclas Hyper y Super no hagan lo mismo?

He usado xkb para reasignar la tecla derecha de Windows (RWIN) a Hyper_R porque quiero usarlo con AutoKey para algunos atajos especiales. lo hice editando

/usr/share/X11/xkb/symbols/pc

modificando la línea RWIN:

  key <RWIN> {  [ Hyper_R   ]   };

(Aquí está la respuesta que me guió.)

Por lo que puedo decir, esto funciona y la tecla correcta de Windows ahora activa Hyper_R. Sin embargo, parece que en Ubuntu (Xubuntu para ser exactos), Hyper y Super de alguna manera están haciendo lo mismo. Entonces Super + e inicia el editor, al igual que Hyper + e.

No estoy seguro de por qué ocurre esto ni de dónde puedo cambiar este comportamiento. Quiero que Hyper y Super sean modificadores diferentes.

Respuesta1

Por alguna razón, Ubuntu actualmente asigna tanto Super como Hyper a Mod4. Puedes ver esto en /usr/share/X11/xkb/symbols/pc:

 key <SUPR> {   [ NoSymbol, Super_L ]   };
 modifier_map Mod4   { <SUPR> };

 key <HYPR> {   [ NoSymbol, Hyper_L ]   };
 modifier_map Mod4   { <HYPR> };

Pude cambiar esto para poner super e hyper en modificadores separados sin necesidad de ser root ni modificar ningún archivo del sistema. No estoy seguro de si esta es la mejor manera, ya que definitivamente no soy un experto en xkb, pero es una forma que ha sido confiable para mí.

Primero, cree un archivo de símbolos local. Tengo el mío en ${HOME}/.config/xkb/symbols/local. Esto asigna Super a Mod3 y Hyper a Mod4.

default  partial modifier_keys
xkb_symbols "superhyper" {

    modifier_map Mod3 { Super_L, Super_R };

    key <SUPR> {    [ NoSymbol, Super_L ]   };
    modifier_map Mod3   { <SUPR> };

    key <HYPR> {    [ NoSymbol, Hyper_L ]   };
    modifier_map Mod4   { <HYPR> };
};

Luego vuelva a compilar el mapa existente para agregar un "local":

setxkbmap -print | sed -e '/xkb_symbols/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.config/xkb - ${DISPLAY}

Coloque esto en un script para que se ejecute cuando inicie sesión. Puede ejecutarlo como un usuario normal.

Respuesta2

Con xmodmappuedes cambiar este comportamiento con 2 comandos:

## Hyper_L is mod4 by default, we will "move" it to Mod3
xmodmap -e "remove mod4 = Hyper_L"
xmodmap -e "add mod3 = Hyper_L"

información relacionada