Как я могу уведомить программу об аппаратном событии?

Теперь я почти уверен, что runner.pyне имеет значения. rifle.py— файл для изменения.

Около строки 375 есть строка:

cmd = [os.environ['TERMCMD'], '-e'] + cmd

Следует попытаться изменить флаг '-e'на что-то другое, в зависимости от вашего $TERMCMD. Я протестировал несколько разных терминалов, и они у меня работают:

  • gnome -терминал :изменить на '--'или'-x'
  • xfce4 -терминал:'-x'
  • лктерминал:'-e'
  • ответная часть -клемма:'-x'
  • терминатор:'-x'

Других не проверял,но, вероятно, это будет один из '--', '-e', '-x'.

1
28.01.2020, 10:33
1 ответ

В Linux это возможно благодаря udev.

  1. Идентифицируйте свое USB-устройство с помощью udevadm info -a /dev/yourdevice. См. Написание правил udev .

  2. из информации об устройстве создайте правило udev:

    SUBSYSTEM=="zzz", ATTRS{idVendor}=="xxx", ATTRS{idProduct}=="yyy",  RUN+="/usr/bin/my_signaler /dev/%k
    
  3. напишите свою сигнальную программу (в моем правиле udev, она находится по адресу/usr/bin/my_sampler):

    #! /bin/bash
    NEW_DEVICE="$1"
    TARGETS=$(pgrep program_name)
    for proc in $TARGETS
    do
        kill -s SIGUSR1 $proc
    done
    
  4. Заставьте вашу программу обрабатыватьSIGUSR1

    #include <stdio.h>
    #include <signal.h> 
    #include <unistd.h>
    
    void wakeup(int sig) {
         printf("go check /dev" );
    }
    
    int main(void) {
        signal(SIGUSR1, wakeup);
    
        while (1) { 
            /* if the SIGUSR1 signal is received while sleep is waiting, sleep will return*/
            sleep(20);
        }
        return 0;
    }
    
3
28.04.2021, 23:25

Теги

Похожие вопросы