如何让 Xmonad 中的音量键和静音键发挥作用

如何让 Xmonad 中的音量键和静音键发挥作用

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

答案1

使用“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”允许您点击多媒体键而无需按住 mod 键。

答案2

看到这个图形.X11.额外类型.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")
...]

答案3

如果您正在使用 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。

双破折号--表示“这不是选项(像 -h),只是值” pactl

答案4

如果amixer set Master 2-不起作用,请尝试一下amixer -D pulse set Master 2-。此外,2%-2%+将改变音量 2%,这可能更容易使用。您可以在终端中测试这些命令,以根据自己的喜好进行调整,然后再将它们放入 xmonad 配置文件中。

相关内容