Comment faire fonctionner les touches de volume et les touches muettes dans Xmonad


22

Je suis nouveau sur Xmonad (je viens de l'installer hier), et comme je n'ai jamais utilisé haskell auparavant, j'ai trouvé la configuration un peu déroutante pour moi. J'ai un peu fait travailler xmobar et trayer, mais je n'ai aucune idée de comment je pourrais faire des touches multimédias pour régler le volume. Quelqu'un peut-il aider avec ça?

Question supplémentaire: Comment gérez-vous votre volume dans xmonad. Utilisez-vous l'icône de plateau ou d'autres choses comme ça?

Voici ma configuration 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")
    ]

Réponses:


24

Utilisez «xev» et appuyez sur les touches multimédias pour découvrir leurs noms. L'un pourrait être «XF86XK_AudioMute». Ensuite, regardez le contenu de '/usr/include/X11/XF86keysym.h' et recherchez le nom. Sur mon système, «XF86XK_AudioMute» est «0x1008FF12».

Déposez-le là où vous mettriez une clé dans votre fichier de configuration. Cela pourrait ressembler à ceci:

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

-COUPER-

 } `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' réglera votre volume. Le «0» remplaçant mod4Mask vous permet d'appuyer sur la touche multimédia sans maintenir votre touche de mod.


si l'amixer set Master 2- ne fonctionne pas pour votre système, essayez l'amixer set Master 2% -
zhenjie

1
Lorsque j'utilise xev et que j'appuie sur les touches de volume sur mon ordinateur portable HP, je n'obtiens aucun code clé, mais la commande showkey les affiche sous forme de code clé 114 et de code clé 115. Comment dois-je modifier ce fichier de configuration XMonad pour qu'il fonctionne avec mes clés?
valentt

Sur Ubuntu 13.04, cela fonctionnait par copier / coller sans rechercher les symboles des touches.
Cory Klein

2
Si la sourdine ci-dessus ne peut pas être réactivée, essayez amixer -D pulse set Master toggleplutôt.
zw324

1
Problème de touche de sourdine: lorsque je démarre xevet que j'appuie sur la touche de sourdine, il n'y a rien à trouver dans le terminal. (Les autres touches sont très bien.) J'ai levé les yeux de /usr/include/X11/XF86keysym.h, j'ai trouvé ceci: #define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */Savez-vous quel est le problème avec ma touche muet? Merci.
Nick

14

Voir ce Graphics.X11.ExtraTypes.XF86 pour les clés que vous souhaitez et ajoutez à votre fichier de configuration:

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")
...]

J'obtiens une erreur avec cette configuration: "xmonad.hs: 29: 1: erreur d'analyse (indentation peut-être incorrecte) Veuillez vérifier les erreurs du fichier." Cette ligne est l'endroit où "[..." commence ... Savez-vous pourquoi cela se produit?
valentt

4
Pour utiliser Graphics.X11.ExtraTypes.XF86 est la meilleure solution pour la lisibilité.
erik

@valentt La ligne avec les points n'est qu'un exemple. Cela devrait ressembler à ça, donc au lieu des trois points, vous avez votre première clé définie:[ ((modMask, xK_e ), spawn "dmenu_run")
erik

9

Si vous utilisez pulseaudio, cela pactldevrait également fonctionner.

, ((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")
]

0est l'évier id. pactl list short sinksaffichera la liste des puits.

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

affichera le récepteur par défaut actuel. Vous pouvez utiliser le nom du récepteur au lieu de l'ID numérique.

Un tiret double --indique 'ce n'est pas une option (comme -h), juste une valeur' ​​à pactl.


1
Agréable! Cependant, cela --n'a pas fonctionné pour moi le 15.10, juste le supprimer a fait l'affaire. En outre, il existe un nom spécial @DEFAULT_SINK@, vous n'avez donc pas besoin de jouer avec les numéros / noms spécifiques aux appareils.
iGEL

1
C'est parfait, à remplacer 0par @DEFAULT_SINK@dans les commandes ci-dessus! Au moins pour ceux qui passent des autres DE - merci beaucoup à vous!
Jan D

Cette réponse a l'avantage de dépasser 100% au lieu de plafonner (comme les bouchons d'amixeur). La mauvaise chose est que cela cesse de fonctionner lorsque vous jouez de la musique à partir d'un autre évier.
mouche en polystyrène voler

3

Si amixer set Master 2-ne fonctionne pas. Essayez amixer -D pulse set Master 2-plutôt. De plus 2%-, 2%+le volume sera modifié de 2%, ce qui peut être plus facile à utiliser. Vous pouvez tester ces commandes dans le terminal pour les ajuster à votre guise avant de les mettre dans votre fichier de configuration xmonad.


... -D pulse ...travaillé pour moi! aussi, un -qdrapeau apaise la sortie
Josh.F
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.