Come si fanno funzionare i tasti del volume e il tasto mute in Xmonad


22

Sono nuovo su Xmonad (l'ho appena installato ieri) e dato che non ho mai usato haskell prima, ho trovato la configurazione un po 'confusa per me. Ho fatto funzionare in qualche modo xmobar e trayer, ma non ho idea di come potrei creare tasti multimediali per regolare il volume. Qualcuno può aiutare con quello?

Domanda aggiuntiva: come si gestisce il volume in xmonad. Usi l'icona della barra delle applicazioni o altre cose del genere?

Ecco la mia configurazione di 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")
    ]

Risposte:


24

Usa 'xev' e tocca i tasti multimediali per scoprire i loro nomi. Uno potrebbe essere "XF86XK_AudioMute". Quindi guarda il contenuto di '/usr/include/X11/XF86keysym.h' e cerca il nome. Sul mio sistema, "XF86XK_AudioMute" è "0x1008FF12".

Rilascialo dove inseriresti una chiave nel tuo file di configurazione. Potrebbe apparire così:

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

-TAGLIO-

 } `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' imposta il volume. Lo '0' in sostituzione di mod4Mask ti consente di toccare il tasto multimediale senza tenere premuto il tasto mod.


se il set amixer Master 2- non funziona per il tuo sistema, prova il set amixer Master 2% -
zhenjie,

1
Quando uso xev e premo i tasti del volume sul mio laptop HP non ricevo i codici chiave, ma il comando showkey li mostra come codice chiave 114 e codice chiave 115. Come devo modificare questo file di configurazione di XMonad per funzionare con le mie chiavi?
valentt

Su Ubuntu 13.04 ha funzionato copia / incolla senza cercare i simboli dei tasti.
Cory Klein,

2
Se il silenziamento sopra non può riattivare, provare amixer -D pulse set Master toggleinvece.
zw324,

1
Problema tasto mute: quando avvio xeve premo il tasto mute, non c'è niente da trovare nel terminale. (Altri tasti vanno bene.) Ho alzato lo sguardo /usr/include/X11/XF86keysym.h, ho trovato questo: #define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */sai qual è il problema con il mio tasto mute? Grazie.
Nick,

14

Vedi questo Graphics.X11.ExtraTypes.XF86 per le chiavi che desideri e aggiungi al tuo file di configurazione:

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

Ottengo un errore con questa configurazione: "xmonad.hs: 29: 1: errore di analisi (possibilmente rientro errato) Verificare che il file non presenti errori." Quella riga è dove "[..." inizia ... Sai perché questo accade?
valentt

4
Utilizzare Graphics.X11.ExtraTypes.XF86 è la soluzione migliore per la leggibilità.
erik,

@valentt La linea con i punti è solo un esempio. Dovrebbe apparire così, quindi al posto dei tre punti hai la tua prima chiave definita:[ ((modMask, xK_e ), spawn "dmenu_run")
erik

9

Se stai usando pulseaudio, pactldovrebbe funzionare anche.

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

0è id sink. pactl list short sinksmostrerà la lista dei lavandini.

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

mostrerà l'attuale sink predefinito. È possibile utilizzare il nome del sink anziché l'id numerico.

Il trattino Doulble --dice 'questa non è un'opzione (come -h), solo valore' a pactl.


1
Bello! Tuttavia, il --non ha funzionato per me il 15.10, basta rimuoverlo ha fatto il trucco. Inoltre, esiste un nome speciale @DEFAULT_SINK@, quindi non è necessario armeggiare con numeri / nomi specifici del dispositivo.
iGEL

1
Questo è perfetto, sostituendolo 0con @DEFAULT_SINK@i comandi sopra! Almeno per coloro che passano da altri DE - grazie mille a te!
Jan D

Questa risposta ha il vantaggio di andare oltre il 100% invece di tappare (come i cappucci degli amixer). La cosa brutta è che smette di funzionare quando si suona musica da diversi lavandini.
polistirolo vola

3

Se amixer set Master 2-non funziona. Prova amixer -D pulse set Master 2-invece. Anche 2%-e 2%+cambierà il volume del 2 per cento, che può essere più facile da usare. È possibile testare questi comandi nel terminale per adattarli a proprio piacimento prima di inserirli nel file di configurazione di xmonad.


... -D pulse ...ha funzionato per me! inoltre, una -qbandiera calma l'uscita
Josh.F
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.