Provides GNU screen-like functionality via a 9p fs of io Hubs. Use the hub wrapper script to start the hubfs and hubshell. STARTING AND CONNECTING WITH 'HUB' WRAPPER SCRIPT hub aug5 #starts and connects to a new hubfs and posts /srv/aug5 hub aug5 #connects a new client to the rc shell started by the previous command hub aug5 rctwo #starts and connects to new rc named rctwo within the aug5 hubfs hub #starts a hubfs named hubfs with an rc named io hub #connects to the default hubfs io MAKING NEW SHELLS AND MOVING IN HUBSHELL: -all commands begin with '%' as first character- %detach #disconnect from attached shell %remote NAME #start a new shell on remote machine %local NAME #start a new shell on local machine shared to hubfs server %attach NAME #move to an existing hubfs shell %err TIME, %in TIME, %out TIME #time in ms for delay loop on file access %status #basic hubfs connection info %list #lc of connected hubfs hubs CONTROLLING HUBFS ITSELF VIA CTL FILE: -reading from ctl file returns status- echo freeze >/n/hubsrv/ctl #freeze Hubs as static files for viewing and editing echo melt >/n/hubsrv/ctl #resume normal flow of data echo fear >/n/hubsrv/ctl #activate paranoid mode and fswrites wait for fsreads to output data echo calm >/n/hubsrv/ctl #resume standard non-paranoid data transmission mode echo quit >/n/hubsrv/ctl #bring everything to a crashing halt and kill the fs NOTES: Each rc shell makes use of 3 Hubs, one for each file descriptor. A Hub file provides both input and output. You can create additional freeform pipelines by touching files to create Hubs. SCRIPTS FOR USE FROM P9P/UNIX: I use 9pfuse in combination with a one-connection listener from plan9 and two tiny scripts to let me access plan 9 hubfs shells from linux and share linux shells back to plan9. Here is an example sequence: plan9: hub -b linhub mount -c /srv/linhub /n/linhub touch /n/linhub/lin0 touch /n/linhub/lin1 touch /n/linhub/lin2 aux/listen1 -tv tcp!*!19999 /bin/exportfs -r /n/linhub # non-authed listen1 will be open for a few seconds, monitor -v output linux: mkdir hubfs 9pfuse 'tcp!ip.of.hub.server!19999' hubfs puthub hubfs/lin gethub hubfs/io This results in a linux shell being shared back to the hubfs at lin, and a plan9 shell accessible to the linux machine. At this point the listen1 command on plan9 can and should be terminated, it is not needed after the connection is made. gethub and puthub scripts: #!/bin/bash # puthub path rc -i <$1"0" >>$1"1" 2>>$1"2" & #!/bin/bash # gethub path cat $1"1" & cat $1"2" & cat >>$1"0" kill %1 kill %2