Вчера lester_dev создал топик ( http://www.linux.org.ru/view-message.jsp?msgid=3048980 ) где опубликовал скрипт с подобным функционалом. Ковыря пришел к выводу, что есть там кардинальный недостаток из-за использования udev: Необходимость настройки от рута, и некоторые другие мелкие неприятности в роде чрезжопного добывания инфы о девайсах. Кроме того косяк с извлекаемыми устройствами, кроме того что там болк-девайс скрипт больше ничего сказать не мог, решения сией проблемы пока меня не посетило, но видимо придтся запоминать гдето подключеные девайсы. Итак скрипт на питоне, вместо фестиваля юзает espeak (исключительно из-за наличия женского голоса не наводящего на мысли о порнухе), и hal: radws% cat ec.py #!/usr/bin/python # -*- coding: utf-8 -*- ########################################################################### # Event Commenter # # ------------------------------ # # copyright : © 2008 radiofun # # jabber : radiofun@jabber.ru # # # ########################################################################### # # # This program is free software; you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # # the Free Software Foundation; either version 2 of the License, or # # (at your option) any later version. # # # ########################################################################### import gobject import threading import math import dbus import dbus.mainloop.glib import os class EventCommenter():#threading.Thread): def __init__(self): #threading.Thread.__init__(self) self.__bus = dbus.SystemBus() self.__hm = self.__bus.get_object('org.freedesktop.Hal','/org/freedesktop/Hal/Manager') self.__hm.connect_to_signal('DeviceAdded', self.deviceAdded) self.__hm.connect_to_signal('DeviceRemoved', self.deviceRemoved) self.__message = "" def deviceAdded(self, devID): device = dbus.Interface(self.__bus.get_object("org.freedesktop.Hal", devID), "org.freedesktop.Hal.Device") message = self.__prepareComment(device) if len(message) > 0: message += " is founded." self.__say(message); def deviceRemoved(self, devID): device = dbus.Interface(self.__bus.get_object("org.freedesktop.Hal", devID), "org.freedesktop.Hal.Device") message = self.__prepareComment(device) if len(message) > 0: message += " is removed." self.__say(message); #prepare device comment! def __prepareComment(self, device): message = "" if device.PropertyExists('info.capabilities'): print 'Have capabilites' #if "volume" if device.QueryCapability('volume'): print 'is volume' size =self.__getHumanReadableSize(device.GetProperty('volume.size')) message += self.__getDeviceName(device) + " volume with size "+ size if device.QueryCapability('storage'): print 'is storage' message += self.__getDeviceName(device) + " storage" return message # in uint64! def __getHumanReadableSize(self, size): dim = int(math.log(size, 1024)) result = { 0 : lambda x: str(x) + ' bytes', 1 : lambda x: str(int(x/1024)) + ' kilobytes', 2 : lambda x: str(int(x/1.048576e6)) + ' megabytes', 3 : lambda x: str(int(x/1.073741824e9)) + ' gigabytes' }[dim](size) return result def __getDeviceName(self, device): if device.PropertyExists('info.product'): return device.GetProperty('info.product') return "unknown" def __say(self, text): pipe = os.popen('espeak -ven+f2 -s 150 -a 10','w') print text pipe.write(text) pipe.close() def __del__ (self): self.__bus.close() dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) ec = EventCommenter() mainloop = gobject.MainLoop() mainloop.run() Вот что выводит на stdout при вытаскивании и вставке диска сбубунтой: radws% ./ec.py ERROR:dbus.proxies:Introspect error on :1.4:/org/freedesktop/Hal/devices/volume_label_Kubuntu_KDE4_8_04_i386: dbus.exceptions.DBusException: org.freedesktop.Hal.NoSuchDevice: No device with id /org/freedesktop/Hal/devices/volume_label_Kubuntu_KDE4_8_04_i386 ERROR:dbus.connection:Exception in handler for D-Bus signal: Traceback (most recent call last): File "/var/lib/python-support/python2.5/dbus/connection.py", line 214, in maybe_handle_message self._handler(*args, **kwargs) File "./ec.py", line 30, in deviceRemoved message = self.__prepareComment(device) File "./ec.py", line 38, in __prepareComment if device.PropertyExists('info.capabilities'): File "/var/lib/python-support/python2.5/dbus/proxies.py", line 68, in __call__ return self._proxy_method(*args, **keywords) File "/var/lib/python-support/python2.5/dbus/proxies.py", line 140, in __call__ **keywords) File "/var/lib/python-support/python2.5/dbus/connection.py", line 607, in call_blocking message, timeout) DBusException: org.freedesktop.Hal.NoSuchDevice: No device with id /org/freedesktop/Hal/devices/volume_label_Kubuntu_KDE4_8_04_i386 Have capabilites is volume Kubuntu-KDE4 8.04 i386 volume with size 678 megabytes is founded. первое исключение связанно с вышеописанной проблемой. Решается правкой функции def deviceRemoved(self, devID) или применением машины времени, что я сейчас и пытаюсь сделать.
Ответ на:
комментарий
от PolarFox
Ответ на:
комментарий
от sabonez
Ответ на:
комментарий
от lester_dev
Ответ на:
комментарий
от wfrr
Ответ на:
комментарий
от Drisch
Ответ на:
комментарий
от Drisch
Ответ на:
комментарий
от wfrr
Ответ на:
комментарий
от wfrr
Ответ на:
комментарий
от Drisch
Ответ на:
комментарий
от x3al
Ответ на:
комментарий
от PolarFox
Ответ на:
комментарий
от PolarFox
Ответ на:
комментарий
от wfrr
Ответ на:
комментарий
от wfrr
Ответ на:
комментарий
от PolarFox
Ответ на:
комментарий
от wfrr
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от wfrr
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Python HAL CPU governor (2010)
- Форум [Ubuntu 11.04] Список последовательных девайсов (2011)
- Форум python+selenium: Получаю ElementNotVisibleException при expected_conditions (2016)
- Форум решил тут написать тулзу для поиска окон. Зацените говнокод (2018)
- Форум Помогите исправить код под Python3 (2015)
- Форум fedora9 system-config-network консоль (2008)
- Форум [python] помогите поймать ошибку (2012)
- Форум Простой скрипт для предотвращения ухода компа в сон (2018)
- Форум Помогите запустить Bottle через Apache CGI (2010)
- Форум Вывод на текстовый экран с Raspberry Pi (2016)