Was ich möchte ist folgendes:
- Wenn ich meine Kopfhörer anschließe, soll der Ton stumm geschaltet und auf einen bestimmten Lautstärkepegel eingestellt werden.
- Wenn ich meinen Kopfhörer aus der Steckdose ziehe, soll der Ton stumm geschaltet (oder auf einen bestimmten Lautstärkepegel eingestellt) werden.
Das Einstellen der Lautstärke ist nicht das Problem, aber ich muss dies irgendwie tun, wenn ich die Kopfhörer ab- / anstecke, also suche ich nach einer Möglichkeit, über diese Ereignisse benachrichtigt zu werden.
Ich fand schnell heraus /proc/asound/card0/codec#0
, ob ein Kopfhörer angeschlossen ist oder nicht, und versuchte, ihn zu überwachen inotifywait
und den Lautstärkepegel anhand geänderter Benachrichtigungen zu ändern . Leider inotifywait
gescheitert, weil proc kein gewöhnliches Dateisystem ist.
Gibt es andere Möglichkeiten, dies zu tun (möglicherweise über PulseAudio)?
Audiogerät: Intel HDA , Audiocodec: Conexant CX20585 .
Um zusammenzufassen, was ich bisher versucht habe:
- Ear Candy: lief überhaupt nicht auf meinem System. Scheint ein aufgegebenes Projekt zu sein?
- Der Code von Karl Bielefeldt funktioniert möglicherweise auf einer Hardware, auf meiner jedoch nicht.
- Die Idee von StephenPaulger scheitert am Fehlen eines "Speaker" -Kanals .
- Motiviert durch aking1012 habe ich es geschafft, indem ich im Kernel-Code herumgehackt habe (nachdem ich den Jack-Sensing-Code des Codecs gefunden habe), aber das ist eine ziemlich umständliche Lösung.
Ich bin immer noch auf der Suche nach einem einfachen Weg, dies zu tun.
quelle
Antworten:
Verwenden Sie den Befehl amixer, um die Lautstärke über die Konsole einzustellen. Beispielsweise:
Setzt dein Level auf 0%
Ich weiß nicht, wie ich das ändern soll, wenn Sie Ihre Kopfhörer anschließen ... aber vielleicht kann Ihnen jemand dabei helfen
quelle
Während des UDS for Oneiric gab es eine Sitzung zur Buchsenerkennung. Einzelheiten finden Sie in der Blaupause . Es hört sich so an, als würde dies genau das tun, wonach ich suche: Unterschiedliche Lautstärken für unterschiedliche Geräte - nur nicht auf jeder Hardware:
Update für 11.10
Dies sollte nun in Oneiric funktionieren - leider scheint mein ThinkPad T510 eines der Systeme zu sein, die derzeit nicht unterstützt werden.
Ein weiteres Follow-up von David Henningsson:
Mehr hier .
Update für den 12.04
Es funktioniert jetzt mit meinem ThinkPad T510 (und vielen anderen Modellen) in Ubuntu 12.04 (Entwicklungsversion).
quelle
Ear Candy bietet einige Funktionen zum Einsetzen / Entfernen von Kopfhörern.
quelle
Ich weiß nicht, wie viel Programmiererfahrung Sie haben, aber Sie haben es erwähnt,
inotifywait
also gehe ich davon aus, dass Sie zumindest mit Shell-Skripten vertraut sind. Das folgende C-Programm, das auf diesem Artikel basiert , sollte in der Lage sein, das Einstecken oder Herausziehen Ihres Kopfhörers zu erkennen. Anschließend können Sie die gewünschten Aktionen ausführen.Das Programm verwendet ein Argument, das ein Pfad zum Eingangsereignisgerät für Ihre Kopfhörer sein sollte. Dies ist
/dev/input/event7
für mich, aber Sie müssen möglicherweise ein paar ausprobieren, um herauszufinden, welches auf Ihrem System vorhanden ist. Sie benötigen Leserechte für dieses Gerät. Das Programm gibt vor dem Beenden den Namen des Geräts sowie den Typ, den Code und den Wert des ersten Ereignisses aus.quelle
event.value
ist zwar geschaltet ... aber dieread
Operation kehrt erst zurück, wenn sich der Wert ändert ... vielleicht weißt du, wie man es nicht blockiert? Danke trotzdem!O_NONBLOCK
wenn Sie das Gerät öffnen, und überprüfen den Rückgabewert desread
. Wenn dies negativ ist, hätte der Lesevorgang entweder blockiert, oder es ist ein anderer Fehler aufgetreten. Es gibt andere kompliziertere Möglichkeiten, dies ohne Abfragen zu tun, wenn Sie dies in ein größeres Programm integrieren.Überprüfen Sie dmesg und andere Protokolldateien. Wahrscheinlich werden beim Ein- und Ausstecken bestimmte Meldungen ausgelöst.
Dann könnten Sie einen Daemon verwenden, um diese Protokolldatei zu analysieren und die Ereignisse zu erkennen. Ich denke du weißt was zu tun ist :)
quelle
Wenn Sie tun
Die Lautsprecherlautstärke wird stummgeschaltet, die Kopfhörer funktionieren jedoch weiterhin. Wenn Sie den Kopfhörer ausstecken, ist kein Ton zu hören. Welches ist fast das, was Sie wollen ...
Wie auch immer ...
Wenn Sie den Lautstärkeregler ändern, wird die Lautstärkeeinstellung für den Lautsprecher erneut vorgenommen. Dies liegt daran, dass pulseaudio versucht, die Lautstärke geschickt einzustellen ( weitere Informationen finden Sie unter http://pulseaudio.org/wiki/PulseAudioStoleMyVolumes ). Wir können jedoch verhindern, dass es mit den Volumes zu schaffen macht.
Öffnen Sie /etc/pulse/default.pa
und finde die Linie
und ändere es auf
Starten Sie pulseaudio neu.
Wenn Sie nun die Lautsprecherlautstärke stumm schalten, hat dies keine Auswirkungen auf die Gesamtlautstärke. Kopfhörer funktionieren also, aber der Lautsprecher bleibt stumm.
quelle
Überprüfen Sie die ACPID-Buchse auf Änderungen, die mithilfe von Python oder C- oder Shell-Skript vorgenommen werden können ( Python-Code zur Steuerung der Wiedergabe und Pause des Kopfhörer-Plugins in der Rhythmbox). Überprüfen Sie, ob sich die ACPID-Spannung geändert hat, um zu erkennen, ob ein Kopfhörer angeschlossen oder angeschlossen ist. Es ist jedoch mit einer Verzögerung von Sekunden zu rechnen.
quelle
Im Lieferumfang von Pulseaudio ist standardmäßig ein Modul enthalten, mit dem genau dies erreicht werden kann:
http://pulseaudio.org/wiki/Modules#module-device-restore
quelle
Ich denke, Sie könnten das erreichen, was Sie brauchen: https://bbs.archlinux.org/viewtopic.php?pid=1105458#p1105458
quelle