К основному контенту

Заставляем работать Network UPS Tools (NUT) после выхода из спящего режима


После обновления до Ubuntu 12.10, заметил, что NUT стал сыпать ошибки в консоль после выхода из спящего режима.

Не уверен как было раньше, но теперь после выхода из спящего режима (да и просто при переподключении кабеля) "usb кабелю" упса стал выдаваться новый файл в /dev.

/dev/bus/usb/008:
crw-rw-r--  1 root root 189, 896 нояб. 25 21:53 001
crw-rw-r--  1 root nut  189, 897 нояб. 27 01:48 002
выдёргиваем и вставляем кабель заново

/dev/bus/usb/008:
crw-rw-r--  1 root root 189, 896 нояб. 25 21:53 001
crw-rw-r--  1 root nut  189, 898 нояб. 27 01:48 003

А в конфиге у меня был прописан абсолютный путь. Пичаль.

/etc/nut/ups.conf
[ippon]
driver = blazer_usb
port = /dev/bus/usb/008/002
desc = "Ippon Black Power Pro 400"

Вообще, можно ставить port = auto, но и это мне не помогло - nut детектил и открывал девайс только при старте демона.

Сперва я подумал сделать правило в udev (есть отличная статья - http://hackaday.com/2009/09/18/how-to-write-udev-rules/), которое бы давало бы упсу одно и тоже имя всегда
~# udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/008/003)
~# cat /etc/udev/rules.d/50-ups.rules 
# This file maintains persistent name for UPS.
# See udev(7) for syntax.

SUBSYSTEM=="usb", ATTR{idVendor}=="0665", ATTR{idProduct}=="5161", SYMLINK+="ups2", NAME="ups"

Однако, если если задать в правиле имя устройства, то в syslog можно прочитать пару ругательств в свой адрес о созданном конфликте наименования девайса:

udevd[27845]: kernel-provided name 'bus/usb/008/010' and NAME= 'ups' disagree, please use SYMLINK+= or change the kernel to provide the proper name

Если попробовать
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0665", ATTR{idProduct}=="5161", KERNEL=="bus/usb/008/0*", SYMLINK+="ups2", NAME="ups"

то... ничего интересного не происходит и в логах нет ошибок.
(Кстати, вместо
sudo /etc/init.d/udev restart
можно использовать
sudo udevadm control --reload-rules)

В общем, после различных экспериментов я остановился на такой строчке
SUBSYSTEM=="usb", ATTR{idVendor}=="0665", ATTR{idProduct}=="5161", SYMLINK+="ups"

по факту, кроме красоты (симлинки), ничего не даёт.
Но зато в /etc/nut/ups.conf пишем вместо auto
port = /dev/ups

Так что пришлось решать проблему по другому:

~# cat /etc/pm/sleep.d/20_ups 
#!/bin/sh

PATH=/sbin:/usr/sbin:/bin:/usr/bin

case "${1}" in
        hibernate)
:
                ;;
        resume|thaw)
service nut restart&
                ;;
esac

При выходе из сна сервис будет перезапускаться и открывать вновь нами созданную симлинку уже на новый девайс. Хотя опять же можно было не заморачиваться и сделать просто port=auto. Но раз уже сделал правило, чего добру пропадать :-)

Хотя в принципе можно в тех же udev rules через RUN+="service nut restart" обновлять подключение к девайсу, заодно и для переподключения кабеля работать будет.

P.S. вероятно лучше юзать не restart, а reload. Не проверял обновить ли он коннект, но если да, то процесс не будет перезапускаться, что должно быть быстрее.

Комментарии

Популярные сообщения из этого блога

Запуск "Петька 3: Возвращение Аляски" в Linux через wine

Очередная часть Петьки и Василий Ивановича - "Петька 3: Возвращение Аляски" тоже хорошо работает в linux под wine. В игре используется отличный от прошлых частей движок, так что патченный wine не нужен. Начало как обычно: $ WINEARCH=win32 WINEPREFIX=/some/games/wine_petka3 WINEDLLOVERRIDES=winemenubuilder.exe=d wineboot В игре используются видеоролики кодированные DivX, соответственно можно сразу поставить кодек, а потом запустить установку: $ WINEARCH=win32 WINEPREFIX=/some/games/wine_petka3 WINEDLLOVERRIDES=winemenubuilder.exe=d winetricks xvid $ WINEARCH=win32 WINEPREFIX=/some/games/wine_petka3 wine E:\\Setup.exe  Запускать как и раньше можно по ярлыку из ~/.local/share/applications/wine/Programs/Buka/Петька 3/Петька 3 - Возвращение Аляски.desktop, скопировав его на Рабочий стол и сделав исполняемым. Хотя в моём случае ярлык на Рабочий стол создался сам и правильным. В консоли лучше тоже запускать ярлык, ибо когда я запускал exe и полноэкранный режим - были а...

Запуск "Петька и Василий Иванович спасают галактику" в Linux через wine

Совсем недавно, почему-то вспомнил про серию "Петька и Василий Иванович". К своему удивлению, обнаружил, что первую и вторую часть портировали на android. Решил поставить себе на ПК. Под wine он отлично поставился, но первая проблема, это отсутствие кодека для видео. Надо скачать  iv5setup.exe  . Но тут есть хитрость, есть ставить все компоненты, то инсталляция завершится неудачей. Для Петьки нужен только ir32_32.dll, так что если выбрать в инсталляторе только версию 3, то всё будет хорошо. Для запуска Петьки без диска можно скопировать все полезные файлы с дисков (*.STR, intro.avi, Disk{1..3}.id). Перед запуском ещё лучше установить в winecfg виртуальный рабочий стол, игра запускается в разрешении 640x480 и может попортить разрешение рабочего стола. И вот Петька запустился - и звук есть и не тормозит, но есть один сильный косяк с отрисовкой некоторых объектов - кажется, что не работает прозрачность - Я долго игрался с параметрами wine касающимися direct3d и ...

Запуск "Петька и Василий Иванович 2: Судный день" в Linux через wine

Пройдя "Петька и Василий Иванович спасают галактику", решил и во вторую часть поиграть. Движок у игры не менялся судя по всему, так что и проблемы те же - подробнее в заметке о первой части . Если лень компилировать самому wine, то можно взять тот, что скомпилировал я, тут . Далее всё по накатанной: #создаём префикс и включаем виртуальный рабочий стол WINEARCH=win32 WINEPREFIX=/some/games/wine_petka2 WINEDLLOVERRIDES=winemenubuilder.exe=d /some/games/wine_petka/bin/winecfg # ставим indeo 4/5 WINEARCH=win32 WINEPREFIX=/some/games/wine_petka2 WINEDLLOVERRIDES=winemenubuilder.exe=d WINE=/some/games/wine_petka/bin/wine winetricks icodecs # тут не отключаем winemenubuilder, что бы появились ярлыки игры WINEARCH=win32 WINEPREFIX=/some/games/wine_petka2 /some/games/wine_petka/bin/wine E:\\Setup.exe # проблема с прошлого раза WINEARCH=win32 WINEPREFIX=/some/games/wine_petka2 WINEDLLOVERRIDES=winemenubuilder.exe=d WINE=/some/games/wine_petka/bin/wine winetricks dsound Далее ...