udev 규칙에서 전화 알림 보내기


13

Linux Mint 13 MATE를 사용하고 있으며 장치를 연결 / 분리 할 때 알림을 설정하려고합니다.

우선, udev-notify 패키지를 찾았 지만 불행히도 거의 작동하지 않습니다. 매우 짧은 시간 (1-2 분) 동안 작동 한 다음 장치를 연결 / 연결 해제하면 충돌이 발생합니다.

Traceback (most recent call last):
  File "./udev-notify.py", line 319, in <module>
    notification.show()
glib.GError: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name :1.1061 was not provided by any .service files

해결책을 찾지 못해 제거해야했습니다. ( 버그 신고 도 제출 )

놀랍게도, 지금까지 찾은 비슷한 유틸리티는 없습니다. 그런 다음 모든 장치와 일치 해야하는 udev 규칙을 작성하려고했습니다. 새 파일을 추가했습니다 /etc/udev/rules.d/notify.rules:

ACTION=="add",    RUN+="/bin/bash /home/dimon/tmp/device_plug.sh"
ACTION=="remove", RUN+="/bin/bash /home/dimon/tmp/device_unplug.sh"

그리고 두 스크립트 :

device_plug.sh :

#!/bin/bash

export DISPLAY=":0"
notify-send "device plugged"

/usr/bin/play -q /path/to/plug_sound.wav &

device_unplug.sh :

#!/bin/bash

export DISPLAY=":0"
notify-send "device unplugged"

/usr/bin/play -q /path/to/unplug_sound.wav &

작동하지만 매우 멍청합니다. 내 질문은 :

  1. lsusb출력 에서 볼 수 있듯이 장치의 실제 제목을 연결하는 방법은 무엇입니까? 현재는 "plugged"및 "unpugged"와 같은 알림을 받았으며 udev 규칙에서 장치 이름을 검색하는 방법을 찾을 수 없습니다 (가능한 경우 스크립트에이를 파라미터)
  2. 현재 너무 많은 알림이 활성화되었습니다. USB 스틱을 연결하면 약 15 개의 알림이 표시됩니다. 그러나을 실행 lsusb하면 연결된 USB 스틱이 단일 장치로 표시됩니다. 따라서 규칙 필터에 더 많은 인수를 추가 해야하는 것으로 보이지만 찾을 수는 없습니다.
  3. 아마도 장치 플러그 / 플러그 해제 알림에 대한 더 나은 솔루션이 있습니까? 당신이 무언가를 알고 있다면 제안하십시오.

답변:


9

글쎄, 몇 시간의 인터넷 검색 및 포럼 요청 후, 나는 그것을 작동시켰다. 일부 USB 장치를 꽂거나 뽑을 때 멋진 시각 및 / 또는 오디오 알림을 받으려는 사람은 내 스크립트를 설치할 수 있습니다. 아래의 설치 세부 정보를 참조하십시오.

우선, 내 자신의 질문에 대한 답변.

1. lsusb출력 에서 볼 수있는 것과 같이 장치의 실제 제목을 첨부하는 방법은 무엇입니까?

커널에는 그러한 제목이 없습니다 (일반적인 경우). 많은 쌍의 제목을 가진 데이터베이스 파일이 있으며 vendor_id:product_id일반적으로 /usr/share/hwdata/usb.ids파일입니다. 이 데이터베이스는에서 업데이트 할 수 있습니다 /usr/sbin/update-usbids.sh. 해당 정보에 대한 linux.org.ru의 사람들에게 감사합니다 .

장치 제목을 쌍으로 가져 오는 데 필요한 특수 도구 vendor_id:product_id가 있는지 모르므로 다음 lsusbgrep같이 조금 해킹해야했습니다 .lsusb | grep '0458:003a'

2. 현재 너무 많은 알림이 활성화되었습니다. USB 스틱을 연결하면 약 15 개의 알림이 표시됩니다.

나는 이것을 위해 규칙을 작성하는 방법을 알지 못했지만 인정할 수있는 다른 방법을 찾았다.

udev우리가 어떤 대체를 사용할 수 있습니다 RUN+="...": 말하자면, 우리는 버스 번호와 장치 번호로 얻을 수 $attr{busnum}$attr{devnum}각각을. 먼저 스크립트에서 첨부 된 장치 목록을 특수 파일에 저장하므로 스크립트에 새로운 "플러그"이벤트가 있고이 장치의 버스 번호와 개발자 번호가 이미 파일에 저장된 경우 알림이 생성되지 않습니다. 둘째, 이러한 대체 $attr{busnum}$attr{devnum}이벤트 만의 "시리즈"에서 장치 중 하나에 일반적으로 사용할 수 있습니다. 그러나 어쨌든 설명 된 알고리즘은 어떤 경우 에나 그것을 정렬해야합니다.


현재 프로젝트 페이지 : my-udev-notify .

다음과 같이 보입니다 :

여기에 이미지 설명을 입력하십시오

설치 세부 사항.

Linux Mint 13에서 테스트 한 결과 Ubuntu 및 기타 Ubuntu의 파생 제품에서 작동해야한다고 생각합니다 udev.

  • 프로젝트 페이지로 이동하여 거기에서 소스를 가져 와서 어딘가에 놓으십시오. 여기에는 하나의 기본 스크립트가 있습니다. my-udev-notify.sh그러나 아카이브에는 플러그 / 플러그 해제 알림 음과 추가 정보가 포함되어 있습니다 readme.txt.
  • /etc/udev/rules.d/my-udev-notify.rules다음 내용으로 파일 을 만드십시오 : (풀었던 실제 경로의 경로를 수정하는 것을 잊지 마십시오 my-udev-notify.sh!)

 ACTION=="add",    RUN+="/bin/bash /path/to/my-udev-notify.sh -a add    -p '%p' -b '$attr{busnum}' -d '$attr{devnum}'"
 ACTION=="remove", RUN+="/bin/bash /path/to/my-udev-notify.sh -a remove -p '%p' -b '$attr{busnum}' -d '$attr{devnum}'"

그런 다음 새로 연결된 장치에서 작동합니다. 즉, 일부 장치를 분리하면 알림이 표시되지 않습니다. 그러나 다시 연결하면됩니다. (예, udev를 다시 시작하지 않고도 작동합니다. 그렇지 않은 경우 재부팅하십시오)

모든 장치에서 작동하게하려면 시스템을 재부팅하십시오. 처음 부팅하는 동안 많은 알림이있을 수 있습니다 (의 알려진 문제 참조 readme.txt). 두 번째 부팅시 알림이 표시되지 않습니다 (시스템이 꺼져있을 때 새 장치를 연결하지 않은 경우)

이를 사용자 정의하거나 (시각적 및 소리 알림 켜기 / 끄기 또는 소리 변경) 아카이브에서 readme.txt를 확인하십시오.


아마도 this question / answer : stackoverflow.com/questions/469243 / ...을 살펴보아야 할 것입니다. pyudev알림을받는 데 사용 되며에 추가 스크립트가 필요하지 않습니다 /etc/udev.
Denilson Sá Maia

장치 플러그 / 플러그 해제 알림은 기본적으로 숨겨 지거나 사용할 수 없습니까?
gonzobrains

1
@gonzobrains, 아니오, /etc/udeve/rules.d에 올바른 규칙을 추가하자마자 새로 연결된 장치에서 작동합니다.
Dmitry Frank

@DmitryFrank 내 말은 기본적으로 이러한 알림이 자동으로 표시됩니까? 아니면 알림을 표시하려면 위 단계를 수행해야합니까? 내 프로젝트의 경우이를 억제하고 싶습니다 (즉, 기본적으로 알림이 표시되지 않음).
gonzobrains

1
@gonzobrains, 위의 단계를 수행하지 않았으며 장치를 꽂거나 뽑을 때 알림이 표시되면 내 스크립트와 관련이 없습니다. 다른 프로그램이이를 대신합니다.
Dmitry Frank

0

시각적 알림 행 앞에 다음 행을 추가하여 스크립트에 어떤 X 디스플레이 notify-send(또는 다른 X 응용 프로그램)를 실행해야하는지에 대한 아이디어를 제공하십시오 .

export DISPLAY=:0
export XAUTHORITY=/var/lib/lightdm/.Xauthority

물론 데스크탑 환경 (또는 디스플레이 관리자)에 따라 두 번째 줄을 변경해야합니다. 이 라인은 유니티를 데스크톱으로, lightdm 을 디스플레이 관리자로 사용하는 Ubuntu 16.04에 적합합니다 .

( 이 게시물에서 )

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.