如何在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")
    ]

Answers:


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

“传真机”将设置您的音量。替换为mod4Mask的“ 0”使您可以在不按住mod键的情况下点击多媒体键。


如果搅拌机设置Master 2不适用于您的系统,请尝试搅拌机设置Master 2%
zhenjie

1
当我使用xev并在HP笔记本电脑上按音量键时,没有任何键,但是showkey命令将它们显示为键码114和键码115。如何更改此XMonad配置文件以使用键?
13年

在Ubuntu 13.04上,它可以在不查找键符号的情况下进行复制/粘贴。
科里·克莱因

2
如果上面的静音无法取消静音,请尝试amixer -D pulse set Master toggle
zw324 2013年

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:解析错误(可能是缩进错误),请检查文件是否存在错误。” 那行是“ [...”开始的地方...您知道为什么会这样吗?
valentt

4
使用Graphics.X11.ExtraTypes.XF86是更好的可读性解决方案。
erik

@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是接收器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转换过来的人-非常感谢!
2016年

这个答案的好处是超过100%而不是封顶(如搅拌器封盖)。不好的是,当您从其他接收器播放音乐时,它会停止工作。
发泡胶飞

3

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


... -D pulse ...为我工作!同样,-q标志使输出
静音
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.