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」を使用し、マルチメディアキーをタップして名前を見つけます。1つは「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キーを保持せずにマルチメディアキーをタップできます。


amixerセットマスター2 -は、あなたのシステムのための仕事をしない場合、セットマスターamixer 2%を試してみてください-
zhenjie

1
HPラップトップでxevを使用してボリュームキーを押すと、キーコードは表示されませんが、showkeyコマンドでキーコード114およびキーコード115として表示されます。
バレンテット

Ubuntu 13.04では、キーシンボルを検索せずにコピー/貼り付けが機能しました。
コリークライン

2
上記のミュートでミュートを解除できない場合は、amixer -D pulse set Master toggle代わりに試してください。
zw324

1
ミュートキーの問題:ミュートキーを起動xevして押すと、ターミナルに何も見つかりません。(他のキーは問題ありません。)から検索しましたが/usr/include/X11/XF86keysym.h、これを見つけました:#define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */ミュートキーの問題を知っていますか?ありがとうございました。
ニック14

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点のある線は一例です。そのように見えるはずなので、3つのドットの代わりに、最初のキーを定義します[ ((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から切り替えている人には-どうもありがとう!
1月D

この回答には、キャッピング(ミキサーキャップなど)の代わりに100%を超える利点があります。悪いことは、別のシンクから音楽を再生すると動作しなくなることです。
発泡スチロールフライ

3

amixer set Master 2-動作しない場合。amixer -D pulse set Master 2-代わりに試してください。また、2%-そして2%+使いやすいかもしれ2パーセントによって音量を変更します。これらのコマンドをターミナルでテストして、xmonad構成ファイルに配置する前に、好みに合わせて調整できます。


... -D pulse ...私のために働いた!また、-qフラグが出力を
静め
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.