Garso redirektinimas

S
  • 20 Grd '16

Dariau skriptuką, per kurį galimą rašyti komandas, ir gauti atsakymą per naršyklę. Apache paleidžia komandas ir gražina rezultatą į naršyklę. Kai su apache vartotoju (www-data) vykdau komandą espeak, garsas atsiranda ne pagrindinėse kolonėles, bet per HDMI prijungtą monitorių (jis su integruotomis kolonėlėmis).
www-data pridėjau į šias grupes: audio pulse pulse-access

Kodėl audio perduoda būtent į šį įrenginį?

T
Techtronic
Mindaugas N.
  • 21 Grd '16

Visu pirma Apache != Apache httpd.

Antra tai security problemos - www-data user/grupe negali tureti tokias teises.

Trecia, greiciausiai reikia nustatyti koki output naudoti, bet kaip ta zadi padaryti jeigu toks user/group neturi home? Gal nebent global naudojant pacmd.

S
  • 21 Grd '16

Turi tokia teisę, nes pridėjau prie sudoers,.

www-data neturi home katalogo ir prie šio vartotojo paprastai neprisijungsi per terminalą, nes prašo slaptažodžio bet su juo galima siųsti komandas per httpd, gal kas supranta, kaip tai veikia?

T
Techtronic
Mindaugas N.
  • 21 Grd '16

@Supoplex said:
Turi tokia teisę, nes pridėjau prie sudoers,.
www-data neturi home katalogo ir prie šio vartotojo paprastai neprisijungsi per terminalą, nes prašo slaptažodžio bet su juo galima siųsti komandas per httpd, gal kas supranta, kaip tai veikia?

Butent kas ? As mielai padeciau, bet nesuprantu ka norima padaryti.

G
  • 21 Grd '16

Kad ir koks ten tavo galutinis užmanymas, susiprograminai tikrai ne pats, nes nelabai gaudaisi, kas ir kaip veikia... Tad būtų gerai žinoti pagal kokį pavyzdį bei ką bandai pasidaryti? Tada bus aišku, ką ir kur reikia konfiginti ar keisti, kas ne taip veikia, gal apskritai pasukai netinkamu keliu, norėdamas įgyvendinti kokį nors paprastą dalyką.

S
  • 22 Grd '16

Darau valdymą per telefoną.
Bandau iš android aplikacijos siųsti komandas, per php skriptą, kuris sukasi ant apache2 (pasižiūrėjau, taip vadinasi paketas, ar kažką vėl maišau?). Čia pvz: Nuoroda

Noriu suprasti šiuos dalykus:
1.Kodėl www-data vartotojas gali siųsti shell komandas ir gauti atsakymą iš php skripto, kai tas vartotojas turi "/usr/sbin/nologin" vietoj paprasto bash shello.
2.Kodėl www-data vartotojas siunčia garsą, ne į numatytą įrenginį?

G
  • 22 Grd '16

1.Kodėl www-data vartotojas gali siųsti shell komandas ir gauti atsakymą iš php skripto, kai tas vartotojas turi "/usr/sbin/nologin" vietoj paprasto bash shello.

Kai tavo php scenarijus vykdo jam pavestą komandą yra sukuriamas naujas procesas, kuriam priskiriamas vartotojo ID, šis ID apsprendžia, ką šis procesas gali nuveikti. /etc/passwd paskutiniame stulpelyje esantis įrašas yra command interpreter. Jis yra visiškai ignoruojamas kada php vykdo komandą. Šis įrašas naudojamas tik tada, kai reikia sukurti interactive login shell - t.y. kai nori prisijungti kaip tas vartotojas.
Žemiau ištrauka iš man 5 passwd:

The command interpreter field provides the name of the user's command language interpreter, or the name of the initial program to execute. The login program uses this information to set the value of the $SHELL environmental variable. If this field is empty, it defaults to the value /bin/sh.


2.Kodėl www-data vartotojas siunčia garsą, ne į numatytą įrenginį?

Teoriškai turėtų groti per sysdefault PCM channel. Pažiūrėk, ką tau rodo:

aplay -L | grep CARD
T
Techtronic
Mindaugas N.
  • 22 Grd '16

Kaip suprantu norima, kad Ubuntu "sneketi" pradetu ? As kazka su speech-dispatcher gaminciau:

import speechd
# Galima set SPEECHD_SOCK, SPEECHD_HOST, SPEECHD_PORT
client = speechd.SSIPClient('testas')
client.set_language('en')
client.set_punctuation(speechd.PunctuationMode.SOME)
client.speak("Hello World!")
client.close()

Arba skaityciau placiau apie Ubuntu Orca

G
  • 22 Grd '16

@Techtronic said:
Kaip suprantu norima, kad Ubuntu "sneketi" pradetu ? As kazka su speech-dispatcher gaminciau:

Ooo, geras įrankis speech-dispatcher ir visai patogus SSIP protokolas

Serveris_A:

# speech-dispatcher -d -p 6560 -c inet_socket
[Thu Dec 22 16:24:26 2016 : 867570] speechd: Speech Dispatcher 0.8.5 starting

Serveris_B:

# echo -e 'SET SELF CLIENT_NAME "testas"\r\nSET SELF PRIORITY TEXT\r\nSPEAK\r\nLaba Diena\r\n.\r\n' | netcat -q1 10.3.2.3 6560
208 OK CLIENT NAME SET
202 OK PRIORITY SET
230 OK RECEIVING DATA
225-16
225 OK MESSAGE QUEUED
S
  • 1
  • 28 Grd '16

Išsiaiškinau, kaip persiųsti audio srautą.
Kas įdomu, kad galima vienu metu klausyti dviejų garso įrašų, turint daugiau nei 1 audio "sink". (du įrenginiai gali groti skirtingą muziką vienu metu)
Pvz, mano atveju, turėjau prijungtas kolonėles ir monitorių su integruotomis kolonėlėmis.

pacmd list-sinks - rodo garso įrenginius(sinks), į kuriuos galima persiųsti garsą.
pacmd list-sink-inputs - rodo visas programas, kurios transliuoja garsą.
Paleidžiant tą pačia dainą iš naujo, susigeneruoja naujas programos index.

Žemiau scenarijus, persiunčiantis audio srautą į kitus įrenginius.

#!/bin/bash
SINK=`pacmd list-sinks | grep '  index' |  awk -F": " {'print $2'}`
pacmd set-default-sink ${SINK}
echo "Devices:"
pacmd list-sinks | egrep 'index|active port' #Rodo visus audio irenginius
echo "* - Active device"
echo
echo "Audio streams:"
pacmd list-sink-inputs | egrep "client:|index" #Rodo visas programas kurios groja
read -e -p "Enter index, for redirection: " sound_index
pacmd move-sink-input ${sound_index} ${SINK}