¿Cómo hacer que las teclas de volumen y la tecla de silencio funcionen en Xmonad?

22

Soy nuevo en Xmonad (lo acabo de instalar ayer), y como nunca antes había usado haskell, la configuración me pareció un poco confusa. Obtuve un poco de xmobar y el trabajo del operador, pero no tengo idea de cómo podría hacer teclas multimedia para ajustar el volumen. ¿Alguien puede ayudar con eso?

Pregunta adicional: ¿Cómo gestionas tu volumen en xmonad? ¿Utiliza el icono de la bandeja u otras cosas como esas?

Aquí está mi configuración de xmonad:

import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.EZConfig(additionalKeys)
import System.IO

main = xmonad =<< statusBar myBar myPP toggleStrutKey myConfig

-- Command to launch the bar
myBar = "xmobar"

-- Custom PP, it determines what is written to the bar
myPP = xmobarPP { ppCurrent = xmobarColor "#429942" "" . wrap "<" ">" }

-- Key bindings to toggle the gap for the bar
toggleStrutKey XConfig {XMonad.modMask = modMask} = (modMask, xK_b)

myConfig = defaultConfig {
    manageHook = manageDocks <+> manageHook defaultConfig,
    layoutHook = avoidStruts $ layoutHook defaultConfig,
    modMask = mod4Mask -- Rebind Mod to windows key
    } `additionalKeys`
    [ ((mod4Mask .|. shiftMask, xK_z), spawn "xscreensaver-command -lock")
    ]
Yasar
fuente

Respuestas:

24

Use 'xev' y toque las teclas multimedia para descubrir sus nombres. Uno podría ser 'XF86XK_AudioMute'. Luego mire el contenido de '/usr/include/X11/XF86keysym.h' y busque el nombre. En mi sistema, 'XF86XK_AudioMute' es '0x1008FF12'.

Suelta eso donde pondrías una clave en tu archivo de configuración. Podría verse así:

import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.EZConfig(additionalKeys)
import System.IO

-CORTAR-

 } `additionalKeys`
    [ ((mod4Mask .|. shiftMask, xK_z), spawn "xscreensaver-command -lock"),
      ((0                     , 0x1008FF11), spawn "amixer -q sset Master 2%-"),
      ((0                     , 0x1008FF13), spawn "amixer -q sset Master 2%+"),
      ((0                     , 0x1008FF12), spawn "amixer set Master toggle")
    ]

'amixer' configurará tu volumen. El '0' que reemplaza mod4Mask le permite tocar la tecla multimedia sin mantener presionada la tecla mod.

Wallace Gean
fuente
si el archivo maestro amixer 2- no funciona para su sistema, trate amixer conjunto Master 2% -
Zhenjie
1
Cuando uso xev y presiono las teclas de volumen en mi computadora portátil HP, no obtengo códigos de teclas, pero el comando showkey los muestra como keycode 114 y keycode 115. ¿Cómo necesito cambiar este archivo de configuración de XMonad para que funcione con mis teclas?
valentt
En Ubuntu 13.04 esto funcionó copiar / pegar sin buscar los símbolos de las teclas.
Cory Klein
2
Si el silencio anterior no se puede activar, intente en su amixer -D pulse set Master togglelugar.
zw324
1
Problema con la tecla de silencio: cuando inicio xevy presiono la tecla de silencio, no hay nada que encontrar en el terminal. (Otras teclas están bien.) Miré hacia arriba /usr/include/X11/XF86keysym.hy encontré esto: #define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */¿Sabes cuál es el problema con mi tecla de silencio? Gracias.
Nick
14

Vea este Graphics.X11.ExtraTypes.XF86 para obtener las claves que desea y agregue a su archivo de configuración:

import Graphics.X11.ExtraTypes.XF86
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
[ ...
, ((0, xF86XK_AudioLowerVolume   ), spawn "amixer set Master 2-")
, ((0, xF86XK_AudioRaiseVolume   ), spawn "amixer set Master 2+")
, ((0, xF86XK_AudioMute          ), spawn "amixer set Master toggle")
...]
Richard Huang
fuente
Aparece un error con esta configuración: "xmonad.hs: 29: 1: error de análisis (posiblemente sangría incorrecta) Compruebe el archivo en busca de errores". Esa línea es donde comienza "[..." ... ¿Sabes por qué sucede esto?
valentt
44
Para utilizar Graphics.X11.ExtraTypes.XF86 es la mejor solución para la legibilidad.
erik
@valentt La línea con los puntos es solo un ejemplo. Debería verse así, así que en lugar de los tres puntos tienes tu primera clave definida:[ ((modMask, xK_e ), spawn "dmenu_run")
erik
9

Si está utilizando pulseaudio, pactltambién debería funcionar.

, ((0 , xF86XK_AudioRaiseVolume), spawn "pactl set-sink-volume 0 +1.5%")
, ((0 , xF86XK_AudioLowerVolume), spawn "pactl set-sink-volume 0 -- -1.5%")
, ((0 , xF86XK_AudioMute), spawn "pactl set-sink-mute 0 toggle")
]

0es la identificación del fregadero. pactl list short sinksmostrará la lista de sumideros.

pactl stat|grep 'Default Sink' | cut -f2 -d':'

mostrará el sumidero predeterminado actual. Puede usar el nombre del receptor en lugar de la identificación numérica.

Doulble dash --dice 'esta no es una opción (como -h), solo valor' a pactl.

Mait
fuente
1
¡Agradable! Sin embargo, --no funcionó para mí en 15.10, solo eliminarlo funcionó. Además, hay un nombre especial @DEFAULT_SINK@, por lo que no necesita jugar con números / nombres específicos del dispositivo.
iGEL
1
¡Esto es perfecto, reemplazando 0con @DEFAULT_SINK@los comandos anteriores! Al menos para aquellos que cambian de otros DE, ¡muchas gracias!
Jan D
Esta respuesta tiene el beneficio de superar el 100% en lugar de limitar (como las tapas de amixer). Lo malo es que deja de funcionar cuando reproduces la música desde un receptor diferente.
espuma de poliestireno volar
3

Si amixer set Master 2-no funciona Intenta en su amixer -D pulse set Master 2-lugar. Además 2%-y 2%+cambiará el volumen en un 2 por ciento, lo que puede ser más fácil de usar. Puede probar estos comandos en el terminal para ajustarlos a su gusto antes de ponerlos en su archivo de configuración xmonad.

Justin Raymond
fuente
... -D pulse ...¡trabajó para mi! también, una -qbandera silencia la salida
Josh.F