Removable disk automounter for udisks
Project description
udiskie is a simple daemon that uses UDisks to automatically mount removable storage devices. This daemon comes with optional mount notifications and GTK tray icon. It also provides a user level CLI for mount and unmount operations.
Usage
Start the automount and notification daemon and show a system tray icon:
udiskie --tray
Mount or unlock a specific device manually:
udiskie-mount /dev/sdb1
Unmount or remove a specific device manually:
udiskie-umount /media/<device-name>
# or with udisks2
udiskie-umount -2 /run/media/<user>/<device>
See the man page for further instructions
Installation
If not installing udiskie via your distribution’s repositories, you should use pip:
# from PyPI:
pip install udiskie
# from a local checkout:
pip install .
Before doing this, however, take care to install all needed dependencies:
UDisks (either UDisks1 or UDisks2 is fine)
PyGObject (GTK3+)
PyYAML (can automatically be installed by pip)
docopt (can automatically be installed by pip)
gettext (optional)
libnotify and a notification daemon (optional)
Access to system resources is implemented using PyGObject. Therefore, some typelibs need to be installed in /usr/lib/girepository-1.0/. For this, you have to enable introspection when building the corresponding packages. udiskie is tested with the following versions:
Gio-2.0
GLib-2.0
GObject-2.0
Gtk-2.0
Notify-0.7
Some of these dependencies are best installed from your distribution’s package repositories.
Permissions
udiskie requires permission for some polkit actions which are usually granted when using a desktop environment. If your login session is not properly activated you may need to customize your polkit settings. Create the file /etc/polkit-1/rules.d/50-udiskie.rules with the following contents:
polkit.addRule(function(action, subject) {
var YES = polkit.Result.YES;
var permission = {
// only required for udisks1:
"org.freedesktop.udisks.filesystem-mount": YES,
"org.freedesktop.udisks.luks-unlock": YES,
"org.freedesktop.udisks.drive-eject": YES,
"org.freedesktop.udisks.drive-detach": YES,
// only required for udisks2:
"org.freedesktop.udisks2.filesystem-mount": YES,
"org.freedesktop.udisks2.encrypted-unlock": YES,
"org.freedesktop.udisks2.eject-media": YES,
"org.freedesktop.udisks2.power-off-drive": YES
};
if (subject.isInGroup("storage")) {
return permission[action.id];
}
});
This configuration allows all members of the storage group to run udiskie.
GTK icons
udiskie comes with a set of themeable custom Tango-style GTK icons for its tray icon menu. The installer tries to install the icons into GTK’s default hicolor theme. Typically this is located in /usr/share/icons/hicolor. If you have any problems with this or you need a custom path you can manually do it like so:
cp ./icons/scalable /usr/share/icons/hicolor -r
gtk-update-icon-cache /usr/share/icons/hicolor
When doing a local installation, for example in a virtualenv, you can manually change the installation prefix for the icon data files like so:
python setup.py install --install-data ~/.local
The icons roughly follow the Tango style guidelines. Some icons incorporate the CDROM icon of the base icon theme of the Tango desktop project (released into the public domain).
Contributing
udiskie is developed on github. Feel free to contribute patches as pull requests here.
Try to be consistent with the PEP8 guidelines. Add unit tests for all non-trivial functionality if possible. Dependency injection is a great pattern to keep modules flexible and testable.
Commits should be reversible, independent units if possible. Use descriptive titles and also add an explaining commit message unless the modification is trivial. See also: A Note About Git Commit Messages.
Contact
You can use the github issues to report any issues you encounter, ask general questions or suggest new features. There is also a public mailing list on sourceforge if you prefer email.
CHANGELOG
1.1.2
add key device_id for matching devices rather than only file systems
improve documentation regarding dependencies
1.1.1
fix careless error in man page
1.1.0
implemented internationalization
added spanish translation
allow to choose icons from a configurable list
1.0.4
compatibility with older version of pygobject (e.g. in Slackware 14.1)
1.0.3
handle exception if no notification service is installed
1.0.2
fix crash when calling udiskie mount/unmount utilites without udisks1 installed
1.0.1
fix crash when calling udiskie without having udisks1 installed (regression)
1.0.0
port to PyGObject, removing dependencies on pygtk, zenity, dbus-python, python-notify
use a PyGObject based password dialog
remove –password-prompt parameter
rename command line parameters
add negations for all command line parameters
0.8.0
remove the ‘–filters’ parameter for good
change config format to YAML
change default config path to $XDG_CONFIG_HOME/udiskie/config.yml
separate ignore filters from mount option filters
allow to match multiple attributes against a device (AND-wise)
allow to overwrite udiskies default handleability settings
raise exception if –config file doesn’t exist
add –options parameter for udiskie-mount
simplify local installations
0.7.0
There are some backward incompatible changes, hence the version break:
command line parameter ‘-f’/’–filters’ renamed to ‘-C’/’–config’
add sections in config file to disable individual mount notifications and set defaults for some program options (udisks version, prompt, etc)
refactor udiskie.cli, udiskie.config and udiskie.tray
revert ‘make udiskie a namespace package’
add ‘Browse folder’ action to tray menu
add ‘Browse folder’ action button to mount notifications
add ‘–no-automounter’ command line option to disable automounting
add ‘–auto-tray’ command line option to use a tray icon that automatically disappears when no actions are available
show notifications when devices dis-/appear (can be disabled via config file)
show ‘id_label’ in tray menu, if available (instead of mount path or device path)
add ‘Job failed’ notifications
add ‘Retry’ button to failed notifications
remove automatic retries to unlock LUKS partitions
pass only device name to external password prompt
add ‘–quiet’ command line option
ignore devices ignored by udev rules
0.6.4
fix logging in setup.py
more verbose log messages (with time) when having -v on
fix mounting devices that are added as ‘external’ and later changed to ‘internal’ [udisks1] (applies to LUKS devices that are opened by an udev rule for example)
0.6.3 (bug fix)
fix exception in Mounter.detach_device if unable to detach
fix force-detach for UDisks2 backend
automatically use UDisks2 if UDisks1 is not available
mount unlocked devices only once, removes error message on UDisks2
mention __ignore__ in man page
0.6.2 (aesthetic)
add custom icons for the context menu of the system tray widget
0.6.1 (bug fix)
fix udisks2 external device detection bug: all devices were considered external when using Sniffer (as done in the udiskie-mount and udiskie-umount tools)
0.6.0 (udisks2 support, bug fix)
cache device states to avoid some race conditions
show filesystem label in mount/unmount notifications
retry to unlock LUKS devices when wrong password was entered twice
show ‘eject’ only if media is available (udisks1 ejects only in this case)
(un-) mount/lock notifications shown even when operations failed
refactor internal API
experimental support for udisks2
0.5.3 (feature, bug fix)
add ‘__ignore__’ config file option to prevent handling specific devices
delay notifications until termination of long operations
0.5.2 (tray icon)
add tray icon (pygtk based)
eject / detach drives from command line
0.5.1 (mainly internal changes)
use setuptools entry points to create the executables
make udiskie a namespace package
0.5.0 (LUKS support)
support for LUKS devices (using zenity for password prompt)
major refactoring
use setuptools as installer
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.