linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Shaun Jackman <sjackman@shaw.ca>
To: linux-hotplug@vger.kernel.org
Subject: Passing ADD/REMOVE events to logged on users
Date: Tue, 19 Feb 2002 05:34:31 +0000	[thread overview]
Message-ID: <marc-linux-hotplug-101409633016838@msgid-missing> (raw)

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

             reply	other threads:[~2002-02-19  5:34 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-02-19  5:34 Shaun Jackman [this message]
2002-02-19  7:47 ` Passing ADD/REMOVE events to logged on users Oliver Neukum

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=marc-linux-hotplug-101409633016838@msgid-missing \
    --to=sjackman@shaw.ca \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).