Xmonad에서 볼륨 키 및 음소거 키 작동 방법


22

나는 Xmonad를 처음 사용했으며 (어제 설치 했음) 이전에 haskell을 사용한 적이 없으므로 구성이 약간 혼란 스럽습니다. 나는 다소 xmobar와 trayer가 작동하도록 만들었지 만 어떻게 볼륨을 조정하기 위해 멀티미디어 키를 만들 수 있는지 전혀 모른다. 누구든지 그걸 도울 수 있습니까?

추가 질문 : xmonad에서 볼륨을 어떻게 관리합니까? 트레이 아이콘이나 다른 것들을 사용하십니까?

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

답변:


24

'xev'를 사용하고 멀티미디어 키를 탭하여 이름을 찾으십시오. 하나는 'XF86XK_AudioMute'일 수 있습니다. 그런 다음 '/usr/include/X11/XF86keysym.h'의 내용을보고 이름을 찾으십시오. 내 시스템에서 'XF86XK_AudioMute'는 '0x1008FF12'입니다.

구성 파일에서 키를 넣을 위치를 버리십시오. 다음과 같이 보일 수 있습니다 :

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

-절단-

 } `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'는 볼륨을 설정합니다. mod4Mask를 대체하는 '0'을 사용하면 모드 키를 누르지 않고도 멀티미디어 키를 누를 수 있습니다.


amixer 세트 마스터 2 시스템에없는 작업을 수행하는 경우, amixer 설정 마스터에게 2 %를하려고 -
젠지

1
내가 사용하는 경우 것으로 xev 내 HP의 노트북에 눌러 볼륨 키를 나는 더 키 코드를 얻을 수 없지만, showkey로 명령은 키 코드 114과 키 코드 (115)로 보여 어떻게 내 키를 사용하여 작업이 XMonad 설정 파일을 변경해야합니까?
발렌티

우분투 13.04에서는 키 기호를 찾지 않고 복사 / 붙여 넣기 작업을 수행했습니다.
Cory Klein

2
위의 음소거가 음소거를 해제 할 수없는 경우 amixer -D pulse set Master toggle대신 시도하십시오 .
zw324

1
음소거 키 문제 : 시작 xev하고 음소거 키를 누르면 터미널에서 찾을 것이 없습니다. (다른 키는 괜찮습니다.)에서 찾아 보니 다음을 /usr/include/X11/XF86keysym.h발견했습니다. #define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */음소거 키의 문제점을 알고 있습니까? 고맙습니다.
Nick

14

원하는 키를 구성 파일에 추가하려면 이 Graphics.X11.ExtraTypes.XF86 을 참조하십시오 .

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

이 설정에 오류가 있습니다 : "xmonad.hs : 29 : 1 : 구문 분석 오류 (잘못된 들여 쓰기) 파일에 오류가 있는지 확인하십시오." 그 줄은 "[..."이 시작되는 곳입니다 ... 왜 이런 일이 일어나는지 아십니까?
발렌티

4
Graphics.X11.ExtraTypes.XF86을 사용하는 것이 가독성에 대한 더 나은 솔루션입니다.
erik

@valentt 점이있는 선은 단지 예일뿐입니다. 3 점 대신 첫 번째 키를 정의해야합니다.[ ((modMask, xK_e ), spawn "dmenu_run")
erik

9

pulseaudio를 사용하는 경우 pactl에도 작동합니다.

, ((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입니다. pactl list short sinks싱크 목록이 표시됩니다.

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

현재 기본 싱크가 표시됩니다. 숫자 ID 대신 싱크 이름을 사용할 수 있습니다.

Doulble 대시 --는 '이것은 옵션이 아니며 (-h), 값은' pactl입니다.


1
좋은! 그러나 --15.10에서 저에게 효과가 없었습니다. 단지 제거하면 트릭이되었습니다. 또한 특별한 이름 @DEFAULT_SINK@이 있으므로 장치 고유 번호 / 이름을 사용하지 않아도됩니다.
iGEL

1
위의 명령으로 대체 0하여 완벽 @DEFAULT_SINK@합니다! 적어도 다른 DE에서 전환하는 사람들에게는 적어도 감사합니다!
Jan D

이 답변은 캡핑 대신 100 % 이상 (믹서 캡과 같은) 장점이 있습니다. 나쁜 점은 다른 싱크대에서 음악을 재생할 때 작동이 중지된다는 것입니다.
스티로폼은

3

만약 amixer set Master 2-작동하지 않습니다. amixer -D pulse set Master 2-대신 시도하십시오 . 또한 2%-하고 2%+사용하기 쉽게 할 수있다 2 %, 음량을 변경할 것이다. 터미널에서 이러한 명령을 테스트하여 xmonad 구성 파일에 넣기 전에 원하는대로 조정할 수 있습니다.


... -D pulse ...나를 위해 일했다! 또한 -q플래그는 출력을 조용히합니다
Josh.F
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.