你如何在 Xmonad 中使音量键和静音键工作

yas*_*sar 29 audio xmonad

我是 Xmonad 的新手(昨天刚安装),因为我以前从未使用过 haskell,所以我发现配置对我来说有点混乱。我得到了一些 xmobar 和托盘的工作,但我不知道如何让多媒体键来调节音量。任何人都可以帮忙吗?

附加问题:您如何在 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")
    ]
Run Code Online (Sandbox Code Playgroud)

小智 27

使用“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
Run Code Online (Sandbox Code Playgroud)

-切-

 } `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")
    ]
Run Code Online (Sandbox Code Playgroud)

“混合器”将设置您的音量。替换 mod4Mask 的“0”允许您在不按住 mod 键的情况下点击多媒体键。

  • 如果上述静音无法取消静音,请尝试使用“amixer -D pulse set Master toggle”。 (2认同)

小智 18

请参阅此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")
...]
Run Code Online (Sandbox Code Playgroud)

  • 使用 Graphics.X11.ExtraTypes.XF86 是更好的可读性解决方案。 (4认同)

Mai*_*ait 10

如果您使用的是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")
]
Run Code Online (Sandbox Code Playgroud)

0是接收器 ID。pactl list short sinks将显示接收器列表。

pactl stat|grep 'Default Sink' | cut -f2 -d':'
Run Code Online (Sandbox Code Playgroud)

将显示当前的默认接收器。您可以使用接收器名称代替数字 ID。

Double dash--告诉 '这不是选项(如 -h),只是值'到pactl.