Bagaimana Anda membuat tombol volume dan tombol mute berfungsi di Xmonad

22

Saya baru mengenal Xmonad (baru saja menginstalnya kemarin), dan karena saya belum pernah menggunakan haskell sebelumnya, saya menemukan konfigurasi sedikit membingungkan bagi saya. Saya membuat xmobar dan trayer berfungsi, tapi saya tidak tahu bagaimana cara membuat tombol multimedia untuk menyesuaikan volume. Adakah yang bisa membantu dengan itu?

Pertanyaan tambahan: Bagaimana Anda mengatur volume Anda di xmonad. Apakah Anda menggunakan ikon baki, atau hal-hal lain seperti itu?

Ini konfigurasi xmonad saya:

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

Jawaban:

24

Gunakan 'xev' dan ketuk tombol multimedia untuk menemukan namanya. Satu mungkin 'XF86XK_AudioMute'. Kemudian lihat isi '/ usr/include/X11/XF86keysym.h' dan cari namanya. Di sistem saya, 'XF86XK_AudioMute' adalah '0x1008FF12'.

Letakkan di tempat Anda meletakkan kunci di file konfigurasi Anda. Mungkin terlihat seperti ini:

import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.EZConfig(additionalKeys)
import System.IO

-MEMOTONG-

 } `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' akan mengatur volume Anda. '0' yang menggantikan mod4Mask memungkinkan Anda untuk mengetuk tombol multimedia tanpa menahan kunci mod Anda.

Wallace Gean
sumber
jika amixer set Master 2- tidak berfungsi untuk sistem Anda, coba amixer set Master 2% -
zhenjie
1
Ketika saya menggunakan xev dan menekan tombol volume pada laptop HP saya, saya tidak mendapatkan kode kunci, tetapi perintah showkey menunjukkannya sebagai kode kunci 114 dan kode kunci 115. Bagaimana saya perlu mengubah file konfigurasi XMonad ini agar berfungsi dengan kunci saya?
valentt
Pada Ubuntu 13.04 ini berfungsi copy / paste tanpa mencari simbol kunci.
Cory Klein
2
Jika bisu di atas tidak dapat bersuara, coba amixer -D pulse set Master togglesaja.
zw324
1
Masalah kunci bisu: Ketika saya memulai xevdan menekan tombol bisu, tidak ada yang ditemukan di terminal. (Kunci lainnya baik-baik saja.) Saya mendongak dari /usr/include/X11/XF86keysym.h, saya menemukan ini: #define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */Apakah Anda tahu apa masalah dengan kunci bisu saya? Terima kasih.
Nick
14

Lihat Graphics.X11.ExtraTypes.XF86 ini untuk kunci yang Anda inginkan dan tambahkan ke file konfigurasi Anda:

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")
...]
Richard Huang
sumber
Saya mendapatkan kesalahan dengan konfigurasi ini: "xmonad.hs: 29: 1: kesalahan parse (mungkin indentasi yang salah) Silakan periksa file untuk kesalahan." Baris itu adalah tempat "[..." dimulai ... Apakah Anda tahu mengapa ini terjadi?
valentt
4
Untuk menggunakan Graphics.X11.ExtraTypes.XF86 adalah solusi yang lebih baik untuk keterbacaan.
erik
@valentt Garis dengan titik-titik hanyalah sebuah contoh. Seharusnya terlihat seperti itu, jadi alih-alih dari tiga titik Anda memiliki kunci pertama Anda ditentukan:[ ((modMask, xK_e ), spawn "dmenu_run")
erik
9

Jika Anda menggunakan pulseaudio, pactljuga harusnya berfungsi.

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

0adalah id tenggelam. pactl list short sinksakan menampilkan daftar wastafel.

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

akan menampilkan bak cuci default saat ini. Anda dapat menggunakan nama wastafel dan bukan angka.

Doulble dasbor --mengatakan 'ini bukan opsi (seperti -h), hanya nilai' untuk pactl.

Mait
sumber
1
Bagus! Namun, --itu tidak bekerja untuk saya pada 15,10, hanya menghapusnya berhasil. Juga, ada nama khusus @DEFAULT_SINK@, jadi Anda tidak perlu bermain-main dengan nomor / nama perangkat tertentu.
iGEL
1
Ini sempurna, ganti 0dengan @DEFAULT_SINK@perintah di atas! Setidaknya bagi mereka yang beralih dari DE lain - terima kasih banyak untuk Anda!
Jan D '
Jawaban ini memiliki keuntungan lebih dari 100% daripada capping (seperti tutup amixer). Yang buruk adalah ia berhenti bekerja ketika Anda memutar musik dari wastafel yang berbeda.
terbang styrofoam
3

Jika amixer set Master 2-tidak bekerja Coba amixer -D pulse set Master 2-saja. Juga 2%-dan 2%+akan mengubah volume sebesar 2 persen, yang mungkin lebih mudah digunakan. Anda dapat menguji perintah-perintah ini di terminal untuk menyesuaikannya sesuai dengan keinginan Anda sebelum Anda memasukkannya ke dalam file konfigurasi xmonad Anda.

Justin Raymond
sumber
... -D pulse ...bekerja untukku! juga, sebuah -qbendera
meredam