Puncte:1

Setați limita maximă pentru creșterea volumului cu i3, pactl și bash

drapel in

Aș dori să configurez i3WM pentru a seta nivelul maxim al volumului (să zicem 150%), astfel încât să nu măresc accidental volumul la o valoare uriașă. Am creat un script bash care execuție este legată de cheia volume_up. Toate elementele funcționează bine separat, dar când pun totul împreună, ceva nu este în regulă.

Cod de script Bash:

#!/bin/bash
max_volume_pc=1 USD
current_volume_pc=$(pactl list sinks | grep '^[[:space:]]Volum:' | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \( [0-9][0-9]*\)%.*,\1,')
if (($volum_curent_buc < $max_volum_buc-10)) ; atunci
    pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
altfel
    a=$(($max_volume_pc - $current_volume_pc))
    pactl set-sink-volume @DEFAULT_SINK@ +$a% && $refresh_i3status
fi

legați în fișierul de configurare i3:

bindsym XF86AudioRaiseVolume exec ~/.config/i3/custom_configs/volume_up.sh 150

Ce funcționează bine:

  • creșterea volumului când este legată este doar o singură comandă pentru creșterea volumului cu pactl (fără niciun script bash, doar comanda exec pactl în fișierul de configurare i3 la fel ca și comanda în declarația if de mai sus)
  • executând numai scriptul bash de mai sus din terminal
  • executând totul împreună, dar când curent_volum_buc este codificat greu la o anumită valoare

Deci, totul indică o problemă cu obținerea valorii curente a volumului atunci când scriptul este executat prin acțiune legată de taste, dar nu am idee cum să o repar. De asemenea, nu există nicio eroare de comunicare de la i3 și sistemul meu de operare este Ubuntu 20.04, dacă aceste informații ar fi utile cuiva. Am încercat și alte moduri de a lega sintaxa, dar rezultatul este întotdeauna același, iar sintaxa furnizată mai sus mi se pare cea mai logică.

Am găsit și reddit cu o întrebare similară aici: https://www.reddit.com/r/i3wm/comments/dens5j/limiting_pulseaudio_max_volume/, dar nu înțeleg ce se întâmplă în fișierul lui dikduk și cred că este mai bine pentru mine să găsesc ajutor pentru a-mi remedia propria problemă, decât să copiez și lipim soluția cuiva

Puncte:1
drapel in

Am găsit problema. A fost cauzat de limba sistemului meu - sunt din Polonia, așa că am setat poloneză la limba sistemului meu, dar am schimbat limba terminalului în .bashrc în engleză pentru că este mai convenabil.

În cazul meu, când am executat scriptul meu bash direct de pe terminal, am primit rezultatul lista pactl se scufundă în engleză (presupun că din cauza schimbării limbii .bashrc), așa că totul a funcționat bine. Dar când am executat scriptul folosind legarea tastelor, rezultatul primit de la comanda de mai sus a fost în poloneză, așa că grep nu a putut găsi cuvântul „Volum”. Pun scriptul bash corect, care funcționează atât atunci când apelez de la terminal, cât și legarea tastelor mai jos, dacă cineva ar avea o problemă similară.

#!/bin/bash
max_volume_pc=1 USD
current_volume_pc=$(pactl list sinks | grep „<Cuvântul dvs. în limba sistemului care înseamnă „volum”>” | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \ ([0-9][0-9]*\)%.*,\1,')

if (($(echo -n $volum_curent_buc | wc -m) == 0)); atunci
    current_volume_pc=$(pactl list sinks | grep '^[[:space:]]Volum:' | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \( [0-9][0-9]*\)%.*,\1,')
fi

if (($volum_curent_buc < $max_volum_buc-10)) ; atunci
    pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
altfel
    a=$(($max_volume_pc - $current_volume_pc))
    pactl set-sink-volume @DEFAULT_SINK@ +$a% && $refresh_i3status
fi
pa4080 avatar
drapel cn
Puteți seta localitatea adăugând [`export LC_ALL=C`](https://unix.stackexchange.com/q/87745/201297) la începutul scriptului (imediat după shebang *#!/bin/bash *) pentru a-l face independent de limbaj.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.