Eu não sei quanta experiência de codificação você tem, mas você mencionou inotifywait
, então eu vou assumir que você está, pelo menos, confortável com scripts de shell. O seguinte programa em C, baseado neste artigo , deve ser capaz de detectar que seus fones de ouvido estão conectados ou desconectados, após o que você pode execute as ações desejadas.
#include <linux/input.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
int main(int argc, char* argv[])
{
int fd = -1;
char name[256]= "Unknown";
struct input_event event;
if ((fd = open(argv[1], O_RDONLY)) < 0) {
perror("evdev open");
exit(1);
}
if(ioctl(fd, EVIOCGNAME(sizeof(name)), name) < 0) {
perror("evdev ioctl");
}
printf("The device on %s says its name is %s\n",
argv[1], name);
read(fd, &event, sizeof(struct input_event));
printf("Event type is %d\n", event.type);
printf("Event code is %d\n", event.code);
printf("Event value is %d\n", event.value);
close(fd);
return 0;
}
O programa recebe um argumento, que deve ser um caminho para o dispositivo de evento de entrada para seus fones de ouvido. Isso é /dev/input/event7
para mim, mas você pode ter que tentar alguns para descobrir qual é o seu sistema. Você precisará de permissões de leitura nesse dispositivo. O programa imprimirá o nome do dispositivo e o tipo, código e valor do primeiro evento antes de sair.