WICHTIG! Diese Anleitung wurde unter ubuntu 10.04/linux mint 9 Isadora und mit dem Chip Conexant ID 5069 auf einem Lenovo G555 getestet, ich empfehle daher vor jedem Eingriff ein Backup der folgenden Dateien zu machen! Bei Unsicherheit besser im Foum oder einem der Supportchanel im IRC oder Jabber Hilfe erbitten.
Alt+F2 drücken > Inhalt kopieren
gedit ./main.cpp
> Ausführen.
Diesen Code habe ich aus dem Beitrag: http://ubuntuforums.org/showpost.php?s=592a0098b8ec4def993796541172b3d0&p=9178795&postcount=131 Vielen Dank nochmal an "xtrman"
/*
* File: main.cpp
* Author: xtr
*
* Created on April 26, 2010, 5:26 PM
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/io.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <syslog.h>
#include <signal.h>
#include <stdint.h>
typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;
typedef uint64_t u64;
#define HDA_VERB(nid,verb,param) ((nid)<<24 | (verb)<<8 | (param))
#define HDA_IOCTL_VERB_WRITE _IOWR('H', 0x11, struct hda_verb_ioctl)
struct hda_verb_ioctl {
u32 verb; /* HDA_VERB() */
u32 res; /* response */
};
void daemonize()
{
pid_t pid, sid;
/* Fork off the parent process */
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
/* If we got a good PID, then
we can exit the parent process. */
if (pid > 0) {
exit(EXIT_SUCCESS);
}
/* Change the file mode mask */
umask(0);
/* Open any logs here */
openlog("pinsensed", LOG_PID, LOG_DAEMON);
/* Create a new SID for the child process */
sid = setsid();
if (sid < 0) {
/* Log any failure here */
exit(EXIT_FAILURE);
}
/* Change the current working directory */
if ((chdir("/")) < 0) {
/* Log any failure here */
exit(EXIT_FAILURE);
}
/* Close out the standard file descriptors */
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
}
bool done = false;
void trpsig(int)
{
done = true;
}
int main(int argc, char** argv) {
daemonize();
signal(SIGTERM, &trpsig);
int fd, state;
struct hda_verb_ioctl val;
syslog(LOG_INFO, "Daemon started.");
fd = open("/dev/snd/hwC0D0", O_RDWR);
if (fd < 0) {
syslog(LOG_ERR, "Failed to open snd device.");
exit(EXIT_FAILURE);
}
val.verb = HDA_VERB(0x19, 0x0f09, 0x0);
if (ioctl(fd, HDA_IOCTL_VERB_WRITE, &val) < 0)
syslog(LOG_ERR, "Failed to write hda verb.");
state = val.res >> 31;
syslog(LOG_INFO, "Starting input value: %0x", state);
while(!done)
{
sleep(1);
val.verb = HDA_VERB(0x19, 0x0f09, 0x0);
if (ioctl(fd, HDA_IOCTL_VERB_WRITE, &val) < 0)
syslog(LOG_ERR, "Failed to write hda verb.");
if(state != (val.res >> 31))
{
state = (val.res >> 31);
syslog(LOG_INFO, "New input value: %0x", state);
if(state == 0x1)
val.verb = HDA_VERB(0x1f, 0x701, 0x1);
else
val.verb = HDA_VERB(0x1f, 0x701, 0x0);
if (ioctl(fd, HDA_IOCTL_VERB_WRITE, &val) < 0)
syslog(LOG_ERR, "Failed to write hda verb.");
}
}
close(fd);
syslog(LOG_INFO, "Daemon stopped.");
exit(EXIT_SUCCESS);
}
2. Diesen ganzen Inhalt aus dem Codefenster kopieren und in die leere main.cpp Datei im gedit einfügen. Speichern und gedit schließen.
3. Alt+F2 drücken > Inhalt kopieren
sudo apt-get install g++
> Im Termial ausführen markieren > Ausführen > Paswwort eingeben und mit j bestätigen.
4. Alt+F2 drücken > Inhalt kopieren
g++ main.cpp -o pinsensed
> Ausführen.
5. Alt+F2 drücken > Inhalt kopieren
sudo ./pinsensed
> Im Termial ausführen markieren > Ausführen > wenn verlangt Paswwort eingeben und mit j bestätigen.
Nun könnt ihr testen ob die Lautsprecher stumm werden wenn ihr die Kopfhörer anschließt, um es zu automatisieren muss man folgendes machen.
6. Alt+F2 drücken > Inhalt kopieren
sudo gedit /etc/rc.local
> Im Termial ausführen markieren > Ausführen > wenn verlangt Paswwort eingeben.
7. Den Inhalt kopieren >
/home/user/pinsensed &
user bitte mit dem Eigenen Anmeldenamen ersetzen! > unter diese Zeile # By default this script does nothing. einfügen
8. Speichern und gedit schließen.
9. System neustarten und testen, einen Haken hat die Sache aber nach dem Aufwachen aus dem Suspendmode muss man die Kopfhörer erneut trennen und anschließen.
Falls jemand Fehler findet bitte ich um eine Antwort zur Not könnt ihr euch auch an die hilfsbereiten Personen im IRC #ubuntu-de wenden.
Viel Erfolg.
Dieser Beitrag darf und soll meiner Meinung geändert werden um in den Wikis anderen Usern speziell mit dem HDA Soundchip als verständliche Anleitung zu dienen.