Studium Szaleństwa

na granicy potępienia

Alsa zamiast PulseAudio i klawiatura?

27 gru 2009 22:12   ~samaelszafran   : Linux/Unix

No, PulseAudio (syf instalowany w najnowszym ubuntu, do dźwięku) ssie. Naprawdę, problemów z nim od cholery – wszyscy doradzają przesiadkę na Alsę – no to ja opiszę krok po kroku jak to zrobić tak, żeby dodatkowo działało jeszcze podgłaszanie/ściszanie z klawiatury ;)

1. Wywalamy Pulse, instalujemy Alse

# aptitude remove pulseaudio
# aptitude install esound

2. Robimy kopie zapasowe, tak na wszelki wypadek

# cp /etc/X11/Xsession.d/70pulseaudio /etc/X11/Xsession.d/70pulseaudio.back && rm /etc/X11/Xsession.d/70pulseaudio

3. Nie ma apletu do dźwięku! Co teraz?

Instalujemy te dwie paczki:

http://resonance.org/~josh/gnome-applets_2.28.0-0unofficial1_i386.deb

http://resonance.org/~josh/gnome-applets-data_2.28.0-0unofficial1_all.deb

I dodajemy regulator głośności jako applet do panelu.

4. Klawiatura

No, moja ulubiona część. Zakładam, że amixer jest już w systemie.

Otwieramy: System → Preferencje → Skróty Klawiszowe

Klikamy na dodaj – podajemy następujące parametry.

nazwa polecenie
ALSA VOLUME UP amixer set PCM 5%+
ALSA VOLUME DOWN amixer set PCM 5%-
ALSA MUTE Przejdź do pkt. 5

5. Wyciszanie

Niestety, nie znalazłem w amixerze prostego sposobu na wyciszenie dźwięku. Tzn tak: można zrobić ‘amixer set PCM mute’, ale wtedy żeby go włączyć spowrotem trzeba nieco innego polecenia użyć (amixer set PCM unmute). To trochę niewygodne, bo nie da się tego w prosty sposób przypisać pod klawisz.

Napisałem własny skrypt, który należy wrzucić do /usr/bin, nadać mu uprawnienia 755, stworzyć plik /var/alsastate i jego podać, jako polecenie do klawisza wyciszania. Skrypt korzysta z języka TCL. Sam skrypt:

#!/usr/bin/env tclsh
set statefile "/var/alsastate"
proc checkstate { } {
	global statefile
	set fd [open $statefile r]
	set state [read $fd]
	close $fd
	return $state
}

proc setstate { to } {
        global statefile
        set fd [open $statefile w]
        puts $fd $to
        close $fd
}

if {[checkstate] == 1} {
	puts stdout "muted!"
	exec amixer set PCM mute
	setstate 0
} else {
	puts stdout "not muted!"
        exec amixer set PCM unmute
	setstate 1
}

I rzeczy które potrzebujemy do jego odpalenia:

# aptitude install tclsh
# touch /var/alsastate

No – i to na tyle. Przypominam, użytkownik musi mieć uprawnienia do zapisu /var/alsastate, oraz że mój skrypt musi mieć uprawnienia +x.

  1. Tril POLAND Mozilla Firefox Windows


    #!/usr/bin/env bash
    if [ -z "cat /var/alsastate | grep ON" ]; then
    amixer set PCM unmute
    echo "not muted"
    echo "ON" > /var/alsastate
    else
    amixer set PCM mute
    echo "muted"
    echo "OFF" > /var/alsastate
    fi

Zostaw komentarz

aby udowodnić że nie jesteś botem, przepisz kod z obrazka.
Anti-Spam Image

Subscribe to Studium Szaleństwa