Как заставить клавиши громкости и клавиши отключения звука работать в 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» установит вашу громкость. «0», заменяющая mod4Mask, позволяет вам нажимать мультимедийную клавишу, не удерживая нажатой клавишу «mod».


если набор amixer Master 2- не работает для вашей системы, попробуйте набор amixer Master 2% -
zhenjie

1
Когда я использую xev и нажимаю клавиши регулировки громкости на своем ноутбуке HP, у меня нет кодов клавиш, но команда showkey показывает их как код 114 и код 115. Как мне нужно изменить этот файл конфигурации XMonad для работы с моими ключами?
Валентин

В Ubuntu 13.04 это работало копирование / вставка без поиска символов клавиш.
Кори Кляйн

2
Если отключение звука выше не может включить звук, попробуйте amixer -D pulse set Master toggleвместо этого.
zw324 26.12.13

1
Проблема с xevкнопкой отключения звука : когда я запускаю и нажимаю кнопку отключения звука, в терминале ничего не появляется. (С остальными клавишами все в порядке.) Я поднял глаза /usr/include/X11/XF86keysym.hи обнаружил следующее: #define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */Знаете ли вы, в чем проблема с моим отключенным ключом? Спасибо.
Ник

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 - лучшее решение для удобства чтения.
Эрик

@valentt Линия с точками - только пример. Это должно выглядеть так, поэтому вместо трех точек вы определили свой первый ключ:[ ((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является идентификатором раковины. pactl list short sinksпокажет список раковин.

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

покажет текущий приемник по умолчанию. Вы можете использовать имя приемника вместо числового идентификатора.

Doulble dash --говорит 'это не опция (например, -h), просто значение' для pactl.


1
Ницца! Однако --15.10 у меня не сработало, просто сняв его, добился цели. Кроме того, есть специальное имя @DEFAULT_SINK@, поэтому вам не нужно возиться с конкретными номерами / именами устройств.
iGEL

1
Это идеальный вариант , заменив 0с @DEFAULT_SINK@в вышеупомянутых команд! По крайней мере, для тех, кто переключается с других DE - спасибо вам большое!
Янв

Преимущество этого ответа состоит в том, что он превышает 100%, а не ограничивает (например, заглушки amixer). Плохо то, что он перестает работать, когда вы играете музыку из другой раковины.
пенополистирол летит

3

Если amixer set Master 2-не работает. Попробуй amixer -D pulse set Master 2-вместо. Также 2%-и 2%+изменит громкость на 2 процента, что может быть проще в использовании. Вы можете проверить эти команды в терминале, чтобы настроить их по своему вкусу, прежде чем поместить их в свой файл конфигурации xmonad.


... -D pulse ...работал на меня! также -qфлаг успокаивает вывод
Josh.F
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.