Автозапустіть сценарій після того, як я підключив або відключив USB-пристрій


22

Що я можу зробити, щоб автоматично запустити сценарій після монтажу / підключення або відключення / відключення USB-пристрою?


2
@XxxXxx: це не варіант, доки у каракатиці немає версії для випуску Ubuntu 12.10
Radu Rădeanu

2
можливий дублікат: askubuntu.com/questions/25071/…
Glutanimate

@Glutanimate: це питання стосується конкретної флеш-пам’яті USB, але я запитав про USB-пристрій, взагалі
Radu Rădeanu

@Glutanimate: скажімо, що відповіді з цього питання корисні, так чи інакше не відповідають на те, як автоматично запустити скрипт після того, як я відключив USB-пристрій.
Radu Rădeanu

1
"скажімо, що відповіді на це питання корисні, так чи інакше не відповідають на те, як автоматично запустити скрипт після відключення USB-пристрою", я здогадуюсь, що якщо ви зміните "ACTION = 'add" "на" ACTION = 'видалити' ", це було б хорошим місцем для початку.
blujay

Відповіді:


17

Завдяки MinimusHeximus і відповідний внесок в потік він згадав у своєму коментарі до мого подібного питання, я думаю , що тепер я можу запропонувати вам таку відповідь.

Вам знадобиться 5 (п'ять) файлів для такого USB-пристрою наступним чином, просто заповнивши відповідні значення <fortheseparts>:

/etc/udev/rules.d/00-usb-<yourdevice>.rules

ACTION=="add", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-in_udev"    
ACTION=="remove", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-out_udev"

/usr/local/bin/usb-<yourdevice>-in_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-in &

/usr/local/bin/usb-<yourdevice>-in

#!/bin/bash
sleep 1
<yourbashscriptcode>

/usr/local/bin/usb-<yourdevice>-out_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-out &

/usr/local/bin/usb-<yourdevice>-out

#!/bin/bash
sleep 1
<yourbashscriptcode>

Примітки:

  1. Ви можете зафіксувати значення <yourvendorid>і <yourproductid>ввівши команду lsusbв терміналі - коли ваш USB-пристрій підключений - в якому будуть перераховані всі наявні вами USB-пристрої, наприклад Bus 003 Device 002: ID 8087:07da Intel Corp., де 8087 - VendorID, а 07da - ProductID .
  2. І це <yourdevice>може бути будь-яке довільне ім'я, яке ви можете обрати для свого USB-пристрою, наприклад, я створив загальне ім'я " клавіатура " під час створення таких файлів для моєї USB-клавіатури, для чого потрібно було застосовувати інший розкладку клавіатури, коли вона підключається.
  3. У деяких сценаріях може не знадобитися використовувати ACTION=="remove"рядок у файлі правил udev, а отже, пов'язані 2 "два" out"файли, коли вам нічого не потрібно робити (наприклад, змінити зміни, зроблені, коли пристрій після підключення пристрою).

З точки зору мого новачка це виглядає неправильно. Чи не повинні ці пропозиції бути в одному рядку?
нафг

1
Це працює: ACTION == "add", ATTRS {idVendor} == "...", ATTRS {idProduct} == "...", ENV {XAUTHORITY} = "/ home / <user> /.Xauthority" , ENV {DISPLAY} = ": 0", RUN + = "<script>"
nafg

@nafg: з моєї точки зору для початківців, це не повинно мати жодних значень, якщо ви помістите всі в один рядок (використовуючи кому як роздільник) у файл правил udev, але я бачу, що ви додали параметри XAUTHORITY і DISPLAY до правил udev, які може працювати для вас або когось іншого, і в цьому випадку мені цікаво, чи вони більше не потрібні у двох скриптах нижче.
Саді

1
так, справа в тому, що вам більше не потрібен проміжний скрипт (за винятком, можливо, для того, щоб поставити фактичний сценарій на задній план), оскільки udev дозволяє встановити середовище. Також моє розуміння в документах udev полягає в тому, що кожен рядок є незалежним правилом, рядки у файлі не поєднуються.
нафг

@nafg: Дякуємо за ваш цінний внесок. Я перемістив ці середовища до правила udev, і це працювало і для мене. Крім того, я перемістив сценарії до / usr / local / bin, коли у мене виникли проблеми після того, як я самостійно перемістив свою / домашню папку в окремий розділ (можливо, тому, що він не був встановлений раніше). Здається, використання перерв рядків у правилах udev не створює проблем принаймні в моїй системі (Ubuntu 13.04 64 біт), і я віддав перевагу цьому для читабельності.
Саді

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.