Як ви робите клавіші гучності та відключення звуку в Xmonad


22

Я новачок у Xmonad (тільки що встановив його вчора), і оскільки я ніколи раніше не використовував haskell, я знайшов конфігурацію трохи заплутаною для мене. У мене дещо зроблена робота з xmobar та треєром, але я не маю уявлення, як мені зробити мультимедійні клавіші для регулювання гучності. Хтось може допомогти у цьому?

Додаткове запитання: як керувати обсягом у 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

-CUT-

 } `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, дозволяє натискати мультимедійну клавішу, не утримуючи клавішу мода.


якщо набір amixer Master 2- не працює для вашої системи, спробуйте встановити amixer set Master 2% -
zhenjie

1
Коли я використовую xev і натискаю клавіші гучності на своєму ноутбуці HP, я не отримую клавішних кодів , але команда showkey показує їх як код 114 і клавіш 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 */чи знаєте ви, в чому проблема з моїм ключем відключення звуку? Дякую.
Нік

14

Дивіться цю графіку.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є ідентифікатор раковини. pactl list short sinksпокаже список раковин.

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

покаже поточну раковину за замовчуванням. Ви можете використовувати ім'я мийки замість числового ідентифікатора.

Подвійний тире --говорить "це не варіант (наприклад, -h), просто значення" pactl.


1
Приємно! Однак --15.10 не працювало для мене, просто його видалення зробило свою справу. Крім того, є спеціальне ім’я @DEFAULT_SINK@, тому вам не потрібно возитися з певними номерами / іменами пристрою.
iGEL

1
Це ідеальний варіант , замінивши 0з @DEFAULT_SINK@в вищезазначених команд! Принаймні для тих, хто перейшов з інших ДЕ - велике спасибі!
січень Д

Ця відповідь має перевагу перейти на 100% замість обмеження (наприклад, кришки аміксера). Погано те, що він перестає працювати, коли ви відтворюєте музику з різних раковин.
пінопласт летить

3

Якщо amixer set Master 2-не працює. Спробуйте amixer -D pulse set Master 2-замість цього. Також 2%-і 2%+змінить гучність на 2 відсотки, що може бути простішим у використанні. Ви можете протестувати ці команди в терміналі, щоб налаштувати їх на свій смак, перш ніж вводити їх у конфігураційний файл xmonad.


... -D pulse ...працював на мене! також -qпрапор
припиняє
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.