คุณทำปุ่มปรับระดับเสียงและปุ่มปิดเสียงใน 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' แล้วแตะปุ่มมัลติมีเดียเพื่อค้นหาชื่อ หนึ่งอาจเป็น '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' จะตั้งค่าระดับเสียงของคุณ การแทนที่ '0' mod4Mask ช่วยให้คุณสามารถแตะคีย์มัลติมีเดียโดยไม่ต้องถือคีย์ mod ของคุณ


หาก amixer set Master 2- ใช้งานไม่ได้กับระบบของคุณลอง amixer set Master 2% -
zhenjie

1
เมื่อฉันใช้xevและกดปุ่มปรับระดับเสียงบนแล็ปท็อป HP ของฉันฉันจะไม่ได้รับรหัสใด ๆ แต่คำสั่งshowkeyแสดงเป็น keycode 114 และ keycode 115 ฉันต้องเปลี่ยนไฟล์กำหนดค่า XMonad นี้เพื่อทำงานกับคีย์ของฉันอย่างไร
valentt

บน Ubuntu 13.04 สามารถคัดลอก / วางได้โดยไม่ต้องค้นหาสัญลักษณ์กุญแจ
Cory Klein

2
หากเสียงด้านบนไม่สามารถเปิดเสียงได้ให้ลองamixer -D pulse set Master toggleแทน
zw324

1
ปัญหาปุ่มปิดเสียง: เมื่อฉันเริ่มxevและกดปุ่มปิดเสียงไม่มีอะไรที่จะหาได้ในเครื่อง (ปุ่มอื่น ๆ ใช้ได้) ฉันค้นหาจาก/usr/include/X11/XF86keysym.hฉันพบสิ่งนี้: #define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */คุณรู้หรือไม่ว่าปัญหาของปุ่มปิดเสียงคืออะไร ขอขอบคุณ.
Nick

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คือ sink ID pactl list short sinksจะแสดงรายการอ่างล้างจาน

pactl stat|grep 'Default Sink' | cut -f2 -d':'

จะแสดง sink เริ่มต้นปัจจุบัน คุณสามารถใช้ชื่ออ่างแทนรหัสตัวเลข

รีบ Doulble --บอก 'นี้ไม่ได้เป็นตัวเลือก (เช่น -h) เพียงค่า' pactlเพื่อ


1
ดี! อย่างไรก็ตามมันใช้--ไม่ได้กับ 15.10 แค่เอามันออกไป นอกจากนี้ยังมีชื่อพิเศษ@DEFAULT_SINK@ดังนั้นคุณไม่จำเป็นต้องเล่นกับหมายเลข / ชื่อเฉพาะของอุปกรณ์
iGEL

1
สิ่งนี้สมบูรณ์แบบแทนที่0ด้วย@DEFAULT_SINK@คำสั่งด้านบน! อย่างน้อยสำหรับผู้ที่เปลี่ยนจาก DE อื่น ๆ - ขอบคุณมากสำหรับคุณ!
Jan D

คำตอบนี้มีประโยชน์มากกว่า 100% แทนที่จะเป็น capping (เช่น amixer caps) สิ่งที่ไม่ดีคือมันหยุดทำงานเมื่อคุณเล่นเพลงจากอ่างที่แตกต่างกัน
โฟมบินได้

3

ถ้าamixer set Master 2-ไม่ได้ผล ลองamixer -D pulse set Master 2-แทน นอกจากนี้2%-และ2%+จะเปลี่ยนระดับเสียง 2 เปอร์เซ็นต์ซึ่งอาจจะง่ายต่อการใช้งาน คุณสามารถทดสอบคำสั่งเหล่านี้ในเครื่องเทอร์มินัลเพื่อปรับเปลี่ยนตามความชอบของคุณก่อนที่คุณจะวางไว้ในไฟล์ xmonad config ของคุณ


... -D pulse ...ทำงานให้ฉัน! นอกจากนี้-qธงยังคงแสดงผลออกมา
Josh.F
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.