Re: how do your hotplugd(8) scripts look? mine is messy and needs cleaning.

Alexandre Ratchov <[email protected]>
Newsgroups gmane.os.openbsd.misc
Message-ID <[email protected]>
On Wed, Jun 10, 2026 at 04:41:26PM -0500, izzy Meyer wrote:
> Hello misc@
> 
> I have slowly been working on this now-sprawling hotplugd(8) attach
> script but I'm not a fan of how messy and complex it has gotten. Any
> tips to clean it up and make it more modular? I don't like the usbdevs
> hack, it feels uncomfortable to me for some reason. How do your
> hotplugd(8) scripts look?

Here's mine

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/bin/sh

DEVCLASS=$1
DEVNAME=$2

case $DEVNAME in
audio[0-9])
	sndioctl server.device=${DEVNAME#audio}
	;;
midi[0-9])
	sndioctl -f midithru/0 server.port=+${DEVNAME#midi}
	;;
urndis0)
	ifconfig $DEVNAME autoconf
esac
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The midi part requires the diff that just went to tech@, though

> 
> /etc/hotplug $ bat -l sh -pp attach
> #!/bin/ksh
> 
> DEVCLASS=$1
> DEVICE=$2
> 
> [ "$DEVCLASS" -eq 0 ] || exit 0
> 
> case "$DEVICE" in
>     ugen*)
>         # printer for CUPS
>         if usbdevs -v | grep -q '03f0:dd11'; then
> 
>             ugen=$(usbdevs -v | awk '
>                 /03f0:dd11/ { found=1 }
>                 found && /driver: ugen[0-9]+/ {
>                     sub(/^[[:space:]]*driver: /, "")
>                     print
>                     exit
>                 }
>             ')
> 
>             [ "$DEVICE" = "$ugen" ] || exit 0
> 
>             usbctl=$(usbdevs -v | awk -v dev="$ugen" '
>                 /^Controller \/dev\/usb[0-9]+:/ {
>                     ctl=$2
>                     sub(":", "", ctl)
>                 }
>                 $0 ~ ("driver: " dev "$") {
>                     print ctl
>                     exit
>                 }
>             ')
> 
>             logger -t hotplug "Printer attached"
> 
>             if [ -n "$usbctl" ]; then
>                 chown _cups:_saned /dev/${ugen}.* "$usbctl"
>                 chmod 660 /dev/${ugen}.* "$usbctl"
>             fi
>         # usb midi keyboard setup for LMMS
>         elif usbdevs -v | grep -q '28e9:0001'; then
>             logger -t hotplug "USB Midi Keyboard Attached"
>             
>             ( midicat -q midi/0 -q midithru/0 ) &
>         fi
>         ;;

Hopefully the midicat(1)-based plmbing won't be needed anymore. See:

https://marc.info/?l=openbsd-tech&m=178116365373422

>     uvideo*)
>         # usb webcam setup for video calls
>         logger -t hotplug "USB Webcam attached"
> 
>         chown nobody:nobody /dev/video*
>         chmod 0777 /dev/video*
>         ;;

I'd suggest simply changing /dev/video* ownership to your user id,
after each upgrade.

Another option, for multi-user machines, would be to add /dev/video*
to /etc/fbtab, ex:

/dev/ttyC0      0600    /dev/video0:/dev/video1

This changes the video devices ownership to the user logged on the
console. Not perfect as /dev/videoN are not revoked when you logout,
but it's much better than world readable devices.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.