[英]XMonad Volume configuration not working
我最近进入了 XMonad,不幸的是我对 Haskell 知之甚少。 我正在尝试配置我的 xmonad.hs 文件,以便我可以控制音量。 然而,现在,即使我的 xmonad.hs 文件编译没有错误,我也无法控制音量。
我从这个链接得到了音量控制代码: http://dmwit.com/volume/
: http://dmwit.com/volume/
这是我的配置文件:
import XMonad
import XMonad.Util.Run(spawnPipe)
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Actions.Volume
import XMonad.Util.Dzen
import Data.Map (fromList)
import Data.Monoid (mappend)
import System.IO
alert = dzenConfig centered . show . round
centered =
onCurr (center 150 66)
>=> font "-*-helvetica-*-r-*-*-64-*-*-*-*-*-*-*"
>=> addArgs ["-fg", "#80c0ff"]
>=> addArgs ["-bg", "#000040"]
main = do
xmproc <- spawnPipe "xmobar /home/david/.xmobarrc"
xmonad $ defaultConfig
{
manageHook = manageDocks <+> manageHook defaultConfig
, layoutHook = avoidStruts $ layoutHook defaultConfig
, logHook = dynamicLogWithPP xmobarPP
{ ppOutput = hPutStrLn xmproc
, ppTitle = xmobarColor "green" "" . shorten 50
}
, modMask = mod4Mask
, keys =
keys defaultConfig `mappend`
\c -> fromList [
((0, xK_F6), lowerVolume 4 >>= alert),
((0, xK_F7), raiseVolume 4 >>= alert)
]
}
我已将代码更改为以下内容,但音量未更改:
main = do
xmproc <- spawnPipe "xmobar /home/luren/.xmobarrc"
xmonad $ defaultConfig
{
manageHook = manageDocks <+> manageHook defaultConfig
, layoutHook = avoidStruts $ layoutHook defaultConfig
, logHook = dynamicLogWithPP xmobarPP
{ ppOutput = hPutStrLn xmproc
, ppTitle = xmobarColor "green" "" . shorten 50
}
, modMask = mod4Mask
, keys =
keys defaultConfig `mappend`
\c -> fromList [
((0, 0x1008FF11), spawn "amixer -D pulse sset Master 4-"),
((0, 0x1008FF13), spawn "amixer -D pulse sset Master 4+")
]
}
(结尾)
这些键是我笔记本电脑上音量媒体键的代码。
我四处窥探,看到了一些其他配置。 我决定做一个小测试,让音频降低音量键打印 Hi ppl! 按下时。 不幸的是,这不起作用。
main = do
xmproc <- spawnPipe "xmobar /home/luren/.xmobarrc"
xmonad $ defaultConfig
{
manageHook = manageDocks <+> manageHook defaultConfig
, layoutHook = avoidStruts $ layoutHook defaultConfig
, logHook = dynamicLogWithPP xmobarPP
{ ppOutput = hPutStrLn xmproc
, ppTitle = xmobarColor "green" "" . shorten 50
}
, modMask = mod4Mask
}
`additionalKeys`
[
((0, xF86XK_AudioLowerVolume), spawn "echo 'Hi ppl!'"),
((0, xF86XK_AudioRaiseVolume), spawn "amixer -D pulse sset Master 15%+")
]
这是我编写的用于控制脉冲音频音量的脚本。 将它转储到一个名为 pulse_control.pl 的文件中,并确保它是可执行的并且在你的PATH
。 它使用pacmd
和pactl
,您可能必须使用发行版的包管理器安装它们。
#!/usr/bin/perl
use List::Util qw[min max];
use Getopt::Long;
my $_IS_MUTED;
my $_TOGGLE_MUTE;
my $_VOL;
my $_INC_VOL;
my $_DEC_VOL;
GetOptions(
"is-muted" => \$_IS_MUTED
, "toggle-mute" => \$_TOGGLE_MUTE
, "volume" => \$_VOL
, "inc-vol" => \$_INC_VOL
, "dec-vol" => \$_DEC_VOL
);
my $sink = `pactl info | sed -rn 's/^Default Sink: (.+)\$/\\1/gp'`;
chomp $sink;
sub ismuted {
my $ismuted = `pacmd dump | grep "$sink" | grep sink-mute | grep yes`;
chomp $ismuted;
if ($ismuted ne "") {
return 1;
} else {
0;
}
}
sub curvol {
my $volline = `pacmd dump | grep "$sink" | grep sink-vol`;
if ($volline =~ m/(0x[0-9a-f]+)/ ) {
return hex $1;
} else {
return 0;
}
}
if ($_IS_MUTED) {
print ismuted(), "\n";
}
elsif($_TOGGLE_MUTE) {
if (ismuted()) {
`pactl set-sink-mute $sink 0`;
} else {
`pactl set-sink-mute $sink 1`;
}
}
elsif($_VOL) {
print int(curvol() * 100.0 / hex("0x10000")), "%\n";
}
elsif($_INC_VOL) {
my $newvol = min(hex("0x10000"), curvol() + int((hex("0x10000") * .04)));
`pactl set-sink-volume $sink $newvol`;
}
elsif($_DEC_VOL) {
my $newvol = max(0, curvol() - int((hex("0x10000") * .04)));
`pactl set-sink-volume $sink $newvol`;
}
然后在我的 xmonad 配置中,我将音量控制绑定到 ctrl+alt+(page up/page down/end)。
`additionalKeys`
[
((controlMask .|. mod1Mask, xK_Page_Up), spawn "pulse_control.pl -inc")
, ((controlMask .|. mod1Mask, xK_Page_Down), spawn "pulse_control.pl -dec")
, ((controlMask .|. mod1Mask, xK_End), spawn "pulse_control.pl -toggle")
]
这也可以使用以下spawn
来实现:
[ ((0, 0x1008FF11), spawn "amixer -q sset Master 2%-"),
((0, 0x1008FF13), spawn "amixer -q sset Master 2%+"),
((0, 0x1008FF12), spawn "amixer set Master toggle")]
这些是多媒体键,但您也可以使用 x86Vol 绑定而不是十六进制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.