Вызов уведомляет - отправляют от правила udev

Я вполне уверен, единственные зарезервированные байты 0 (ASCII Nul) и 0x2f (ASCII '/', наклонная черта вправо).

Можно легко сделать файл с'.', '\' и другие броские вещи в нем. Думайте "unicode имена файлов", которые содержат все виды странных значений байта.

Естественно, у Вас не может быть названий дубликата файла в том же каталоге, так названные "." файлы и ".." не может обычно делаться простым пользователем: часть файловой системы ядра создает их, когда каталог создается.

Также обратите внимание, что большинство файловых систем имеет предел на длину имени файла, и Вы не можете создать файл, имя которого является пустой строкой.

13
11.08.2017, 01:45
3 ответа
[115885] Ну, после долгих часов гуглинга и вопросов на форумах, я заставил его работать (похоже). Любой, кто хочет получить хорошее визуальное и/или аудио уведомление, когда какое-то USB устройство подключено/отключено, может установить мой скрипт, смотрите подробности установки ниже.

enter image description here

Прежде всего, ответы на мои собственные вопросы.

1. Как получить фактическое название подключенного устройства, такое же, как я вижу на выходе [116419]lsusb[116420]?

В ядре нет таких названий (в общем случае). Есть файл базы данных с названиями для многих пар [116178]vendor_id:product_id[116179], обычно это файл [116180]/usr/share/hwdata/usb.ids[116181]. Эту базу данных можно обновить с помощью [116182]/usr/sbin/update-usbids.sh[116183]. Спасибо ребятам из [116184]linux.org.ru[116185] за эту информацию.

Не знаю, есть ли какой-нибудь специальный инструмент для получения названия устройства по паре [116186]vendor_id:product_id[116187], поэтому мне пришлось немного взломать [116188]lsusb[116189] и [116190]grep[116191]: например, [116192]lsusb | grep '0458:003a'

  1. 2. В настоящее время активировано слишком много уведомлений. Скажем, когда я прикрепил USB-флешку, я получил около 15 уведомлений!
  2. Я должен признать, что не знаю, как написать правило для этого, но я нашел другой способ, как его отфильтровать.
  3. udev[116197] позволяет нам использовать некоторые замены для [116198]RUN+="..."[116199]: скажем, мы можем получить номер шины и номер устройства по [116200]$attr{busnum}[116201] и [116202]$attr{devnum}[116203] соответственно. Во-первых, в моем скрипте список прикрепленных устройств хранится в специальном файле, так что если в скрипте появилось новое событие "plug", а busnum и devnum этого устройства уже хранятся в нашем файле, то уведомления не генерируются. А во-вторых, эти замены [116204]$attr{busnum}[116205] и [116206]$attr{devnum}[116207] обычно доступны только для одного из устройств из "серии" событий. Но в любом случае, объясненный алгоритм должен его разобрать.
  4. Текущая страница проекта: [116208]my-udev-notify[116209].
  5. Похоже на то:

подробности установки. Протестировано на Linux Mint 13, думаю, оно должно работать на Ubuntu и других производных Ubuntu, и надеюсь, с [116213]udev[116214] оно будет работать на любой *nix системе.

Зайдите на страницу проекта [116421][116422], возьмите оттуда исходники и поместите их куда-нибудь. Там есть только один основной скрипт: [116423]my-udev-notify.sh[116424], но архив также содержит звуки для уведомлений о подключении/отключении, плюс некоторую дополнительную информацию, подробнее см. в [116425]readme.txt[116426].

Создайте файл [116427]/etc/udev/rules.d/my-udev-notify.rules[116428] со следующим содержимым: (не забудьте изменить путь к вашему реальному пути, куда вы распаковали [116429]my-udev-notify.sh[116430]!)

После этого он должен работать для вновь подключенных устройств. То есть, если вы отключите какое-нибудь устройство, вы не получите уведомления. Но когда вы подключите его обратно, вы получите. (да, для меня это работает без перезапуска udev. Если это не для тебя, попробуй перезагрузка)

Чтобы она работала на всех устройствах, просто перезагрузите систему. ЗАМЕЧАНИЕ, что может быть много уведомлений во время первой загрузки (см. известные проблемы в [116219]readme.txt[116220]). На втором загрузка, не будет никаких уведомлений (если только вы не подключите новое устройство, когда система выключена)

mount //192.168.15.123/a /home/b/c -t cifs -o username=d,password=e,uid=f,gid=g,iocharset=utf8
mount //192.168.15.123/a /home/b/c -t cifs -o username=d,password=e,uid=f,gid=g,iocharset=utf8,codepage=cp437
mount //192.168.15.123/a /home/b/c -t cifs -o username=d,password=e,uid=f,gid=g,iocharset=utf8,codepage=cp850

Вы можете настроить ее (включить/выключить визуальные и звуковые уведомления, или изменить звуки), проверить readme.txt в архиве на предмет деталей[115921].

9
27.01.2020, 19:53

Добавьте следующие строки перед строками визуальных уведомлений, чтобы дать сценарию представление о том, на каком дисплее X следует запускатьnotify-send(или любое другое приложение X):

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

Конечно, вы должны изменить вторую строку в соответствии с окружением вашего рабочего стола (или диспетчером отображения ). Эта строка отлично работает для Ubuntu 16.04, которая использует unity в качестве рабочего стола и lightdm в качестве диспетчера отображения.

(из этого поста)

0
20.08.2021, 12:56
sudo -u X_user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/X_userid/bus notify-send 'Hello world!' 

Где пользователь X _— это пользователь, от имени которого вы хотите работать, а идентификатор пользователя X _— идентификатор группы пользователя

пример большая птица и 1000

2
20.08.2021, 12:56

Теги

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