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

8

He usado xkb para reasignar la tecla de Windows derecha (RWIN) a Hyper_R porque quiero usarla con AutoKey para algunos accesos directos 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 dispara 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, y también Hyper + e.

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

Alexander Rechsteiner
fuente
Había algo aquí , aunque no creo que el diálogo ahora exista en 13.10 ...
Wilf
Pero esto tiene que ser configurable en alguna parte, ¿verdad?
Alexander Rechsteiner
Puede encontrarlos endconf-editor
Wilf
1
Gracias, pero no hubo suerte allí. Maldición, todo esto de la reasignación de teclado en Linux me da diabetes.
Alexander Rechsteiner
+1: concordia (en la parte de diabetes). No pude encontrar una guía agradable, completa y detallada sobre cómo se administra el teclado en Ubuntu. Hay una serie de interacciones entre gnome-control-center, gnome-tweak-tool, xkbd, xmodmap que son bastante complejas y, lo que es peor, indocumentadas. Si encuentras algún enlace, ¡compártelo! (Aunque sospecho que casi nadie lo sabe de verdad. Solo vea la falta de capacidad de bugs.launchpad.net/ubuntu/+source/gnome-settings-daemon/+bug/… )
Rmano

Respuestas:

11

Por alguna razón, Ubuntu actualmente asigna Super e Hyper a Mod4. Puede 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 hiper en modificadores separados sin necesidad de ser root o 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 e 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}

Ponga esto en un script que se ejecutará cuando inicie sesión. Puede ejecutarlo como un usuario normal.

ergosys
fuente
¿Es posible editar ese archivo en su lugar para cambiar HYPR a Mod3?
Alex Moore-Niemi
3
Puedes hacerlo. Los beneficios de no editar en su lugar es que una actualización del sistema no sobrescribirá sus cambios.
ergosys
Para mí, lo tuve trabajando brevemente con raw.githubusercontent.com/jabbalaci/dotfiles/master/.Xmodmap aunque sigue deteniéndose misteriosamente ...
Alex Moore-Niemi
También un inconveniente del método de mi respuesta que he encontrado es que si su teclado se desconecta o pierde la comunicación USB debido a una falla aleatoria, el script debe ejecutarse nuevamente. Probablemente haya alguna forma de volver a ejecutarlo automáticamente, pero no lo he investigado. Afortunadamente, la falla aleatoria solo ocurre una vez al mes para mí. Si edita los archivos del sistema, esto no debería ser un problema. Entonces hay ventajas y desventajas.
ergosys
1
Yo también uso eso. Ya hay una configuración enlatada, así que uso: setxkbmap -option 'caps: hyper'
ergosys el
3

Con xmodmapusted puede 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"
Alex Stragies
fuente