2016 m. gruodžio 28 d., trečiadienis

Aplikacijų atvaizdavimas ir garso valdymas

Problema 1:
Siunčiant DISPLAY=:0 espeak "test" komandą metą klaidą, kadangi vartotojas nepridėtas prie audio grupės:
No protocol specified
xcb_connection_has_error() returned true
...

Sprendimas:
Pridedam www-data į audio grupę:

$ sudo adduser www-data audio
$ sudo adduser www-data pulse
$ sudo adduser www-data pulse-access

Problema 2:
Prie kompiuterio prijungtos kolonėlės ir monitorius (su integruotomis kolonėlėmis) hdmi jungtimi. Siunčiant komandas, garsas girdisi ne į pagrindines kolonėles, bet per monitorių.

Patikrinam garso įrenginius:
$ cat /proc/asound/cards 
 0 [SB             ]: HDA-Intel - HDA ATI SB
                      HDA ATI SB at 0xfe8f4000 irq 16
 1 [HDMI           ]: HDA-Intel - HDA ATI HDMI
                      HDA ATI HDMI at 0xfe99c000 irq 32

Kaip sužinoti kuris įrenginys groja?

$ pacmd list-sinks  | egrep "index|state|alsa.card_name"
    index: 0
state: RUNNING
alsa.card_name = "HDA ATI HDMI"
    index: 13
state: SUSPENDED
alsa.card_name = "HDA ATI SB"

Sprendimas:
Šis scenarijus permes visą garsą iš hdmi į kolonėles. Galima pasirinkti, tam tikrą garso įvestį  ir tik ją persiųsti į kitą įrenginį.


#!/bin/bash

SINK=`pacmd list-sinks | grep '  index' |  awk -F": " {'print $2'}`
pacmd set-default-sink ${SINK}
pactl list short sink-inputs | awk '{ print $1 }' | while read sound_input
do
    
    pacmd move-sink-input ${sound_input} ${SINK}
done


Garso įjungimas/išjungimas:
SINK=`pacmd list-sinks|grep  '  index'| awk '/index:/{ print $2 }'` #Surandame veikiantį garsi įrenginį
pactl set-sink-mute $SINK toggle #Kontroliuojam garsą šiame įrenginyje

Tiesioginis garso siuntimas į kolonėles:
$ espeak "Wisdom begins in wonder. " 10 -w wav --stdout > test.wav && aplay  test.wav -v -V mono|stereo # Su garso indikacija

Grojimas papildant tekstą
$ espeak "Appending new text" -w wav --stdout >> test.wav && aplay test.wav

Grafinių aplikacijų siuntimas:

Tam, kad turėtume galimybę siųsti grafines aplikacijas, turime:
  • Paleisti xhost + komandą, kuri duos leidimą jungtis prie X serverio.
  • Murodyti  x11 aplinkos kintamąjį.
$ echo $DISPLAY # Sužinome savo x11 aplinkos kintamąjį
:0

Iš programėlės siunčiame grafines aplikacijas į x11 aplinką:
DISPLAY=:0 glxgears 
DISPLAY=:0 espeak "test" 

Įvykdyti komandos, kuriai reikalingos sudo teisės nepavyks. Turime vartotojui suteikti papildomasteises sudoers dokumente.
$ sudo visudo || sudo nano /etc/sudoers
www-data  ALL = NOPASSWD: /sbin/programos1, /sbin/programa2 # Pridedam šį įrašą, kad gautume prieiga prie nurodytų programų


user_name ALL=(ALL) NOPASSWD: /sbin/poweroff, /sbin/reboot, /sbin/shutdown #Perkrovimo teisės suteikimas


Garso siuntimas į dvejus įrenginius:


$ sudo apt-get install paprefs


Pasileidus komandą einam į Simultaneous Output -> ir Pažymim Varnelę

Kaip padaryti, kad kiekvieną kartą užsikrovus, nustatymai pasiliktų tokie patys

Perkraunam pulse audio
$ systemctl --user restart pulseaudio.service

Ir nustatom output ant keliu įrenginių
$ pavucontrol