Я не знаю, сколько у вас опыта кодирования, но вы упоминали inotifywait, поэтому я собираюсь предположить, что вы, по крайней мере, комфортно с командами оболочки. Следующая C-программа, основанная на этой статье, должна иметь возможность обнаруживать, что ваши наушники подключены или отсоединены, после чего вы можете выполнять любые действия, которые вы хотите.
#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;
}
Программа принимает один аргумент, который должен быть путём к входному устройству событий для ваших наушников. Это /dev/input/event7 для меня, но вам, возможно, придется попробовать несколько, чтобы найти, что находится в вашей системе. Вам понадобятся права на чтение на этом устройстве. Программа выведет имя устройства, а также тип, код и значение первого события перед выходом.