From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shaun Jackman Date: Tue, 19 Feb 2002 05:34:31 +0000 Subject: Passing ADD/REMOVE events to logged on users Message-Id: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-hotplug@vger.kernel.org I found it necessary to write a script that passes device hotplug events on to the logged on users of the system. For example, the user plugs in an MP3 USB device and the device icon is added to the desktop (or the manager is opened, etc). It's not too long so I've simply attached it to this message. If this script (or one that performs the same function) were standardized then other packages could depend on the functionality provided by it. This is only a first pass, so if anyone has any suggestions, I'd love to hear 'em. The intended functionality is this. This file lives as /etc/hotplug/usb/user and any usb.usermap devices that wish to be manged by it simply links 'ln -s /etc/hotplug/usb/user /etc/hotplug/usb/mydevice'. Whenever mydevice is plugged into the usb chain hotplug calls /etc/hotplug/usb/mydevice which in turn calls ~/.mydevicerc for each logged in user. If that device distributes a standard script for its plugin/remove action, the user can simply 'ln -s /etc/hotplug/usb/mydevicerc ~/.mydevicerc'. Cheers, Shaun #!/usr/bin/perl -w use English; # read the hotplug environment my $device = $ENV{'DEVICE'}; my $action = $ENV{'ACTION'}; die "$dev: missing hotplug environment\n" unless defined $device && defined $action; # derive the name of the managed device from the calling name ($dev = $action eq 'remove' ? readlink $0 : $0) =~ s~.*/(.*)~$1~; # change the permissions of the device so users can access it chmod 0660, $device; chown( (getpwnam "root")[2], (getgrnam $dev)[2], $device); # set up a remover callback symlink $0, $ENV{'REMOVER'} if defined $ENV{'REMOVER'}; delete $ENV{'DISPLAY'}; delete $ENV{'TERMINAL'}; foreach( `who`) { my ($user, $terminal) = split; chomp( my $rc = `echo ~$user/.${dev}rc`); if( -x $rc && !fork) { # set the DISPLAY/TERMINAL environment $ENV{ $terminal =~ /^:[0-9]+$/ ? 'DISPLAY' : 'TERMINAL' } = $terminal; # run the user script exec "su $user -c $rc" or die "$dev: exec failed"; } } _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel