Hello, Not what you asked for, but taking in care some people here complain about not having a "desktop wireless connection app" as they got used by the popular OSs, I'll share (shamelessly) what I improvised to solve my specific needs with the aim to encourage others to write their own solutions.
In my case, since I prefer to use ethernet cables and static IP addresses for all machines in my home LAN, I wrote the following shell scripts to connect my laptop in those occasions I'm out, in a bar or a restaurant. They are also intended to be useful individually; if at some place I have an ethernet cable available, I directly run the second one (dhcp-connect.sh) to establish a provisional dhcp connection, then (optionally) when I shutdown the machine before living the place, the third one (reset-LAN.sh) restores the LAN version of /etc/hosts and /etc/resolv.conf so I don't need to bother about reseting them manually when I'm back home. I'm new to openbsd, it surely offers simpler ways to accomplish the same tasks that I still ignore (advices welcome). ========================================================================= #!/bin/sh # ~/bin/wifi.sh - occasional wireless connection in OpenBSD [ "`whoami`" != "root" ] && { echo "You must be root"; exit 1; } # PUT YOUR NORMAL USER HERE user=morlock # IMPORTANT: if you don't use dhcp in your home LAN save a copy of your # LAN version of /etc/resolv.conf and /etc/hosts to this directory. backdir=/home/$user/.wifi [ ! -d $backdir ] && mkdir $backdir rec=$backdir/stored [ ! -e $rec ] && { touch $rec chmod 600 $rec chown $user:$user $rec } tmp=/tmp/wifi-`date +%H%M%S` # FUNCTIONS cancel() { ifconfig $int -inet -inet6 -nwid -bssid -wpakey -nwkey ifconfig $int down [ -f $tmp ] && rm $tmp [ -f $stored_tmp ] && rm $stored_tmp exit 1 } get_password() { if grep -i $bssid $rec; then echo -n "Use the above \"$nwid\" stored password? [Y/n] " read answer if [ "$answer" != "n" ]; then password=`grep -i $bssid $rec | awk '{ print $2 }'` else printf "$nwid $enc $message: " read password fi else printf "$nwid $enc $message: " read password fi } # SELECT WIRELESS INTERFACE interfaces="`ifconfig wlan | awk -F: '/^[^\t]/ { print $1 }' | xargs`" if [ ! "$interfaces" ]; then echo "No wireless interfaces found." 1>&2 exit 1 elif [ `echo "$interfaces" | wc -w | xargs` -gt 1 ]; then echo $interfaces int=none until echo $interfaces | grep -q $int; do echo -n "Interface? " read int done else int=$interfaces fi trap cancel INT ifconfig $int up ifconfig $int -inet -inet6 -nwid -bssid -wpakey -nwkey # SCAN AND CHOOSE AN ACCESS POINT echo 'Scanning on '$int'...' ifconfig $int scan | awk -F'\t' '/\tnwid/ { print $3 }' | nl -s') ' > $tmp if [ `awk 'END { print NR }' $tmp` -eq 0 ]; then echo "No access points found." cancel elif [ `awk 'END { print NR }' $tmp` -gt 1 ]; then sed 's/\(.*\) nwid \(.*\) chan .*/\1 \2/' $tmp ap=0 until egrep -q "^ *$ap\) nwid" $tmp ; do echo -n "number? " read ap done else ap=`awk -F\) '{ print $1 }' $tmp | sed 's/ *//'` fi # GET AP DATA bssid=`egrep '^ +'$ap')' $tmp | egrep -o '(..:){5}..' | tr "[a-f]" "[A-F]"` nwid=`grep -i $bssid $tmp | sed 's/.* nwid \(.*\) chan .*/\1/' | sed 's/"//g'` enc=`grep -i $bssid $tmp | awk -F, '{ print $NF }'` case $enc in wep) key=nwkey message="key (for HEX prefix 0x)" get_password ;; wpa*) key=wpakey message="passphrase" get_password ;; *) key='-wpakey -nwkey' password='' ;; esac # SET UP INTERFACE ifconfig $int nwid "$nwid" $key $password || cancel # CONNECTION ATTEMPT /home/$user/bin/dhcp-connect.sh $int || cancel # STORE PASSWORD [ "$password" != "" ] && { sed -i "/$bssid/d" $rec echo -e "$bssid\t$password" > > $rec } # End of wifi.sh ======================================================================= #!/bin/sh # ~/bin/dhcp-connect.sh # Connect using dhcp and set hostname (OpenBSD version) [ "`whoami`" != "root" ] && { echo "You must be root"; exit 1; } # PUT YOUR NORMAL USER HERE user=morlock # IMPORTANT: if you don't use dhcp in your home LAN save a copy of your # LAN version of /etc/resolv.conf and /etc/hosts to this directory. backdir=/home/$user/.wifi int=$1 [ "$int" ] || { echo "Usage: `basename $0` <interface>" exit 1 } clean_start() { for i in `ps xw | grep dhclient | grep $int | \ awk '{ print $1 }'` do [ $i ] && kill $i done } cancel() { clean_start [ -f $backdir/hosts ] && /home/$user/bin/reset-LAN.sh exit 1 } reset_LAN_at_shutdown() { [ ! -e /etc/rc.shutdown ] && { echo "# /etc/rc.shutdown" > /etc/rc.shutdown chmod 600 /etc/rc.shutdown } grep -q "# Reset LAN" /etc/rc.shutdown 2>/dev/null || { echo > > /etc/rc.shutdown echo '# Reset LAN' > >/etc/rc.shutdown echo -n "[ -x /home/$user/bin/reset-LAN.sh ] && " \ > >/etc/rc.shutdown echo "/home/$user/bin/reset-LAN.sh" > >/etc/rc.shutdown } } dhclientConf() { grep -q "send host-name \"`hostname`\"" \ /etc/dhclient.conf 2>/dev/null || echo "send host-name \"`hostname`\";" \ > >/etc/dhclient.conf } clean_start trap cancel INT # Comment this if you think you don't need it dhclientConf # Attempt a connection dhclient $int ip=`ifconfig $int | awk '/inet/ { print $2 }'` if [ "$ip" ]; then [ -e $backdir/hosts ] && { # Set hosts file (Optional) echo "# /etc/hosts" >/etc/hosts echo "# (by $0)" > >/etc/hosts echo -e "127.0.0.1\tlocalhost" > >/etc/hosts echo -e "::1\tlocalhost" > >/etc/hosts echo -e "$ip\t`hostname`\t`hostname -s`" > >/etc/hosts reset_LAN_at_shutdown /etc/rc.d/smtpd restart grep -q ntpd /etc/rc.conf.local && /etc/rc.d/ntpd restart } else echo "`basename $0`: could't establish the connection." cancel fi # End of dhcp-connect.sh ============================================================================= #!/bin/sh # ~/bin/reset-LAN.sh - Reset your home LAN (OpenBSD version) [ "`whoami`" != "root" ] && { echo "You must be root" 1>&2; exit 1; } # PUT YOUR NORMAL USER HERE user=morlock # IMPORTANT: if you don't use dhcp in your home LAN save a copy of your # LAN version of /etc/resolv.conf and /etc/hosts to this directory. backdir=/home/$user/.wifi diff -q $backdir/resolv.conf /etc/resolv.conf || { cp $backdir/resolv.conf /etc || exit 1 echo "`basename $0`: restored LAN version of /etc/resolv.conf" } diff -q $backdir/hosts /etc/hosts || { cp $backdir/hosts /etc || exit 1 echo "`basename $0`: restored LAN version of /etc/hosts" } # End of reset-LAN.sh *** Finally, to add a menu entry to the window manager: echo 'permit nopass <your_user> cmd /home/<your_user>/bin/wifi.sh' \ > > /etc/doas.conf In ~/.cwmrc: command wifi-connect "xterm -title wifi-connect \ -e \"doas /home/<your_user>/bin/wifi.sh; echo 'quiting...'; sleep 4\"" In a ~/.fvwmrc menu entry: + "WiFi connect" Exec exec xterm -title "WIFI Connect" \ -e "doas /home/<your_user>/bin/wifi.sh; echo 'quiting...'; sleep 4" And that's all. Walter