On 2016-04-13 15.31.36 +0200, Erling Westenvik wrote:
> On Wed, Apr 13, 2016 at 09:37:53AM +0000, Mike Burns wrote:
> > I hooked some shell scripts up with zenity to make a wifi GUI.
> > 
> Interesting. Care to share the code somewhere? Maybe it could evolve
> into a port/package?

I'll share the code, but it has some caveats:

- I made this for my laptop and my use cases.
- I hate automation.
- It's not very good.
- The GUI gives no feedback after you select the access point.

Feel free to turn it into anything you'd like.

Attached is a man page for wifi(1), the wifi script itself, and wifi-gtk
which makes use of the wifi script. Run it as 'doas wifi-gtk -C $HOME/.wifi',
where $HOME/.wifi is your wifi config (see the attached man page).

===
wifi.1:
===

.Dd $Mdocdate$
.Dt WIFI 1
.Os
.Sh WIFI
.Nm wifi
.Nd connect to OpenBSD wifi
.Sh SYNOPSIS
.Nm progname
.Fl C Ar config
.Fl i Ar iface
.Ar nickname
.Sh DESCRIPTION
The
.Nm
utility connects to the wifi on the interface
.Ar iface
according to the
.Ar nickname
as read from
.Ar config .
.\" .Sh ENVIRONMENT
.\" For sections 1, 6, 7, and 8 only.
.Sh FILES
The configuration file follows a simple format:
.Pp
.Dl nickname: ifconfig-options autoconfiguration
.Pp
These three values are as follow:
.Bl -tag -width Ds
.It Va nickname
The name of the wifi network, to be passed to the
.Nm
program.
.It Va ifconfig-options
Options for
.Xr ifconfig 1 ,
such as
.Li nwid
and
.Li wpakey .
.It Va autoconfiguration
Either
.Li dhcp
for DHCP or
.Li rtsol
for IPv6 autoconf.
.El
.Sh EXIT STATUS
The exit status of
.Nm
is the same as the exit status of the
.Pa /etc/netstart
program.
.Sh EXAMPLES
.Pp
.Dl sudo wifi -C ~/.wifi -i iwn0 home
.Pp
.\" .Sh DIAGNOSTICS
.\" For sections 1, 4, 6, 7, 8, and 9 printf/stderr messages only.
.Sh SEE ALSO
.Xr ifconfig 1 ,
.Xr hostname.if 5
.\" .Sh STANDARDS
.\" .Sh HISTORY
.Sh AUTHORS
.An "Mike Burns" Aq mike+open...@mike-burns.com
.\" .Sh CAVEATS
.\" .Sh BUGS

===
wifi:
===

#!/bin/sh

usage() {
  echo usage: wifi -C config -i iface nickname
  exit 64
}

args=`getopt "C:i:" $*`

if [ $? -ne 0 ]; then
  usage
fi

set -- $args

while [ $# -ne 0 ]; do
  case "$1" in
    -C)
      config="$2"
      shift; shift
      ;;
    -i)
      iface="$2"
      shift; shift
      ;;
    --)
      shift
      to_connect="$@"
      break
      ;;
  esac
done

if [ -z "$config" -o -z "$iface" -o -z "$to_connect" ]; then
  usage
fi

file="/etc/hostname.$iface"
dhcp_cfg=$(sed -ne "/^${to_connect}:.*dhcp/s/.*: *\(.*\) *dhcp/\1/p" "$config")
rtsol_cfg=$(sed -ne "/^${to_connect}:.*rtsol/s/.*: *\(.*\) *rtsol/\1/p" 
"$config")

if [ -z "$dhcp_cfg" -a -z "$rtsol_cfg" ]; then
  echo "Could not find '$to_connect' in $config" >&2
  exit 1
fi

echo "# Autogenerated by wifi(1)" > "$file"
echo "# Connection name: '${to_connect}'" >> "$file"

if [ -n "$dhcp_cfg" ]; then
  echo "$dhcp_cfg" >> "$file"
  echo dhcp >> "$file"
fi

if [ -n "$rtsol_cfg" ]; then
  echo "$rtsol_cfg" >> "$file"
  echo rtsol >> "$file"
fi

exec sh /etc/netstart

===
wifi-gtk
===

#!/bin/sh

if [ $# -ne 2 ]; then
  echo usage: wifi-gtk -C config
  exit 64
fi

config="$2"

nwid=$(sed -ne 's/\(.*\):.*/\1/p' "$config" | zenity --list --title Wifi 
--column nwids)

if [ -n "$nwid" ]; then
  exec /home/mike/.bin/wifi -C "$config" -i iwn0 "$nwid"
fi

Reply via email to