Régler le volume en utilisant php exec et amixer

0

J'ai écrit un petit script php pour contrôler le volume de ma machine locale avec alsa:

<?php
# for simplicity and testing it really just executes the command:
echo exec('amixer set Master 5%+') . " \n";

Maintenant, quand je lance ce script en ligne de commande, cela fonctionne très bien:

$ php volume.php 
Front Right: Playback 39226 [60%] [on] 
$ php volume.php 
Front Right: Playback 42503 [65%] [on] 
$ php volume.php 
Front Right: Playback 45780 [70%] [on]

J'ai de la musique et je l'entends devenir de plus en plus forte.

Mais lorsque j'essaie d'exécuter le script via Apache à partir du navigateur qui l'appelle, http://localhost/volume.phpcela ne fonctionne pas.

# http://localhost/volume.php
Front Right: Playback 55709 [10%] [on]
# F5
Front Right: Playback 55709 [15%] [on]
# F5
Front Right: Playback 55709 [20%] [on]

Maintenant, je n'entends aucun changement de volume et les pourcentages semblent être sans rapport avec l'état actuel. Il dit 10% - 15% - 20% alors qu'il est encore à 70%.

Mon apache fonctionne sous mon utilisateur, il exec('whoami')me donne le nom d'utilisateur avec lequel je suis connecté sur mon shell où tout fonctionne correctement.

# httpd.conf
User mkt
Group mkt

Je suis sur Fedora 22.

C'est probablement dû à l'environnement de processus apache2. Une idée de comment réparer ça?

MISE À JOUR :

Voici la sortie de aplay -L:

[mkt@localhost ~]$ aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
pulse
    PulseAudio Sound Server
default
    Default ALSA Output (currently PulseAudio Sound Server)
sysdefault:CARD=Intel
    HDA Intel, ALC888 Analog
    Default Audio Device
front:CARD=Intel,DEV=0
    HDA Intel, ALC888 Analog
    Front speakers
surround21:CARD=Intel,DEV=0
    HDA Intel, ALC888 Analog
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=Intel,DEV=0
    HDA Intel, ALC888 Analog
    4.0 Surround output to Front and Rear speakers
surround41:CARD=Intel,DEV=0
    HDA Intel, ALC888 Analog
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Intel,DEV=0
    HDA Intel, ALC888 Analog
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Intel,DEV=0
    HDA Intel, ALC888 Analog
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Intel,DEV=0
    HDA Intel, ALC888 Analog
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Intel,DEV=0
    HDA Intel, ALC888 Digital
    IEC958 (S/PDIF) Digital Audio Output
hdmi:CARD=NVidia,DEV=0
    HDA NVidia, HDMI 0
    HDMI Audio Output
hdmi:CARD=NVidia,DEV=1
    HDA NVidia, HDMI 1
    HDMI Audio Output
hdmi:CARD=NVidia,DEV=2
    HDA NVidia, HDMI 2
    HDMI Audio Output
hdmi:CARD=NVidia,DEV=3
    HDA NVidia, HDMI 3
    HDMI Audio Output

Sur la ligne de commande, seuls les paramètres par défaut et les impulsions fonctionnent:

amixer -D pulse set Master 5%+
amixer -D default set Master 5%+

Avec PHP même ces deux ne fonctionnent pas. Quoi qu'il en soit ... mon son provient des haut-parleurs de mon moniteur qui sont branchés via HDMI. Donc, je suppose que les 4 derniers appareils sont mes candidats. Mais pas d'entre eux fonctionnent.

$ amixer -D hdmi:CARD=NVidia,DEV=0 set Master 5%+
$ amixer -D hdmi:CARD=NVidia,DEV=1 set Master 5%+
$ amixer -D hdmi:CARD=NVidia,DEV=2 set Master 5%+
$ amixer -D hdmi:CARD=NVidia,DEV=3 set Master 5%+

Dans les quatre cas, il est écrit: (avec DEV = [0-3] bien sûr)

ALSA lib control.c:954:(snd_ctl_open_noupdate) Invalid CTL hdmi:CARD=NVidia,DEV=3
amixer: Mixer attach hdmi:CARD=NVidia,DEV=3 error: No such file or directory

METTRE À JOUR

Sortie de aplay -l:

$ aplay -l

**** Liste der Hardware-Geräte (PLAYBACK) ****
Card 0: Intel [HDA Intel], Device 0: ALC888 Analog [ALC888 Analog]
  Sub-Devices: 1/1
  Sub-Device #0: subdevice #0
Card 0: Intel [HDA Intel], Device 1: ALC888 Digital [ALC888 Digital]
  Sub-Devices: 1/1
  Sub-Device #0: subdevice #0
Card 1: NVidia [HDA NVidia], Device 3: HDMI 0 [HDMI 0]
  Sub-Devices: 1/1
  Sub-Device #0: subdevice #0
Card 1: NVidia [HDA NVidia], Device 7: HDMI 1 [HDMI 1]
  Sub-Devices: 0/1
  Sub-Device #0: subdevice #0
Card 1: NVidia [HDA NVidia], Device 8: HDMI 2 [HDMI 2]
  Sub-Devices: 1/1
  Sub-Device #0: subdevice #0
Card 1: NVidia [HDA NVidia], Device 9: HDMI 3 [HDMI 3]
  Sub-Devices: 1/1
  Sub-Device #0: subdevice #0

$ amixer -c0 set Master 5%+
$ amixer -c1 set Master 5%+

Les deux ne fonctionnent pas!

Markus Kottländer
la source
Ce qui serait utile, ce sont vos journaux Apache. Ils vous diront probablement ce qui ne va pas immédiatement. ou vous pouvez aussi vous connecter directement à la page par divers moyens.
djsmiley2k
Puisque ton défaut est pulse, pourquoi ne pas l'utiliser? c'est à dire:pactl set-sink-volume 0 0% pactl set-sink-volume 0 100% pactl set-sink-volume 0 -- +10% pactl set-sink-volume 0 -- -10%
codemonk113
1
Dans les deux cas , vous devez définir l'environnement PULSE_SERVER variable: putenv("PULSE_SERVER=/run/user/".getmyuid()."/pulse/native");.
Piernov
@piernov l'a cloué! Postez ceci comme une réponse et je l'accepterai. Vous souhaitez peut-être aussi le poster ici: stackoverflow.com/questions/36867273/…
Markus Kottländer