Jak działają klawisze głośności i klawisz wyciszenia w Xmonad


22

Jestem nowy w Xmonad (właśnie zainstalowałem go wczoraj), a ponieważ nigdy wcześniej nie korzystałem z haskell, konfiguracja była dla mnie trochę myląca. Zmodyfikowałem Xmobar i Trayer, ale nie mam pojęcia, jak zrobić klawisze multimedialne, żeby wyregulować głośność. Czy ktoś może w tym pomóc?

Dodatkowe pytanie: Jak zarządzać woluminem w Xmonadzie. Czy używasz ikony zasobnika lub innych podobnych rzeczy?

Oto moja konfiguracja xmonada:

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

Odpowiedzi:


24

Użyj „xev” i dotknij klawiszy multimediów, aby odkryć ich nazwy. Jednym z nich może być „XF86XK_AudioMute”. Następnie spójrz na zawartość „/usr/include/X11/XF86keysym.h” i poszukaj nazwy. W moim systemie „XF86XK_AudioMute” to „0x1008FF12”.

Upuść tam, gdzie chcesz umieścić klucz w pliku konfiguracyjnym. Może to wyglądać tak:

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

-CIĄĆ-

 } `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” ustawi głośność. „0” zastępujące mod4Mask umożliwia dotknięcie klawisza multimediów bez przytrzymywania klawisza mod.


jeśli amixer set Master 2- nie działa w twoim systemie, spróbuj amixer set Master 2% -
zhenjie

1
Kiedy używam xev i naciskam klawisze głośności na laptopie HP, nie otrzymuję kodów, ale polecenie showkey pokazuje je jako kod 114 i kod 115. Jak zmienić ten plik konfiguracyjny XMonad, aby działał z moimi kluczami?
valentt

Na Ubuntu 13.04 działało to kopiowanie / wklejanie bez wyszukiwania symboli kluczy.
Cory Klein

2
Jeśli powyższe wyciszenie nie może wyłączyć wyciszenia, spróbuj amixer -D pulse set Master togglezamiast tego.
zw324

1
Problem z klawiszem wyciszenia: Kiedy zaczynam xevi naciskam klawisz wyciszenia, w terminalu nie ma nic do znalezienia. (Inne klawisze są w porządku.) Podniosłem wzrok /usr/include/X11/XF86keysym.h, znalazłem to: #define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */Czy wiesz, na czym polega problem z moim klawiszem wyciszenia? Dziękuję Ci.
Nick

14

Zobacz Graphics.X11.ExtraTypes.XF86 dla kluczy, które chcesz i dodaj do pliku konfiguracyjnego:

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

Występuje błąd z tą konfiguracją: „xmonad.hs: 29: 1: błąd analizy (możliwe niepoprawne wcięcie) Sprawdź plik pod kątem błędów.” Ta linia zaczyna się od „[...”… Czy wiesz, dlaczego tak się dzieje?
valentt

4
Korzystanie z Graphics.X11.ExtraTypes.XF86 jest lepszym rozwiązaniem zapewniającym czytelność.
erik

@valentt Linia z kropkami to tylko przykład. Powinno to tak wyglądać, więc zamiast trzech kropek zdefiniowano swój pierwszy klucz:[ ((modMask, xK_e ), spawn "dmenu_run")
erik

9

Jeśli używasz pulseaudio, pactlrównież powinno działać.

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

0to identyfikator zlewu. pactl list short sinkspokaże listę zlewów.

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

pokaże bieżący domyślny zlew. Możesz użyć nazwy ujścia zamiast identyfikatora numerycznego.

Doulble dash --mówi „to nie jest opcja (jak -h), po prostu wartość” do pactl.


1
Miły! Jednak --nie działało to dla mnie 15.10, po prostu usunięcie go załatwiło sprawę. Ponadto istnieje specjalna nazwa @DEFAULT_SINK@, więc nie musisz bawić się numerami / nazwami specyficznymi dla urządzenia.
iGEL

1
To jest doskonały, zastępując 0ze @DEFAULT_SINK@w powyższych poleceń! Przynajmniej dla tych, którzy przechodzą z innych DE - wielkie dzięki!
Jan D

Ta odpowiedź ma tę zaletę, że przekracza 100% zamiast limitów (np. Amixer cap). Złe jest to, że przestaje działać, gdy grasz muzykę z innego zlewu.
lot styropianowy

3

Jeśli amixer set Master 2-nie działa. Spróbuj amixer -D pulse set Master 2-zamiast tego. Również 2%-i 2%+będzie zmieniać głośność o 2 procent, co może być łatwiejsze w użyciu. Możesz przetestować te polecenia w terminalu, aby dostosować je do swoich upodobań, zanim umieścisz je w pliku konfiguracyjnym xmonad.


... -D pulse ...pracował dla mnie! również -qflaga
ucisza
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.