This is a VNC server for A/UX, Apple's old UNIX. It allows graphical remote control of the computer across login sessions, as if you were sitting down at the console.
First: I have only tested this under A/UX 3.1. It will probably work under 3.0. It will almost certainly not work under anything older.
There are two steps to installing aux-minivnc. The first step is installing the kernel driver. The second part is installing the VNC daemon. All you need to do this is a checkout of this git repository on the A/UX machine in question. Binaries are in the repository. You can also download a TAR archive and follow the same instructions.
# cd <checkout-dir>/kernel
# ./install.sh
# newconfig fb
If newconfig works, check that /dev/fb0
exists, then reboot.
# ls /dev/fb0
crw------- 1 bin bin 62, 0 Nov 6 19:17 /dev/fb0
# reboot
# cd <checkout-dir>/app
# ./install.sh
You can then run vncd
to start the VNC server directly. If you want vncd to run at startup, add a line to inittab to start it off:
# cat inittab.line >> /etc/inittab
Please make very sure to use >> in this line, if you use > you will knacker your inittab and your A/UX installation will no longer work.
Use your favourite VNC viewer to connect to port 5900. This has been most extensively tested with RealVNC.
Note that RealVNC's default modifier mappings are rather wonky and will lead to weird results. Use the "expert" tab of the connection settings to change the Left and RightCmdKey settings to Super_L and Super_R, and the Left and RightOptKey settings to Alt_L and Alt_R, respectively. Otherwise option isn't mapped to alt, which is odd, because that's what it ought to be.
If you're an end-user stop reading this now: you do not need development tools installed to use aux-minivnc. Otherwise:
uncompress
command.The kernel driver is in the kernel/ folder
cc
, and results in a single object file to be linked into the kernel.The application is in app/
vncd
.The whole kernel driver: there aren't many new ones of these about at the moment.
kallDriver
, both in the CLUT code and in the "current mode" code, shows how to call a Mac video driver from inside A/UX.fb_ui_mouse
function demonstrates how to muck about with the "low memory globals" of the current Mac session, and how to inject events into that session.fb_phys
function, along with the corresponding call to the FB_PHYS
ioctl in app/session.c
can perhaps act as a worked example of how to map physical addresses into a process's address space. Note that the first argument to phys() is process-local: a nicer way of doing this, if you were aiming for reusability, would be to scan through the phys list in the user struct and find the next free one, rather than just using '1'.The keyboard code in the application is probably the most interesting thing. It works by fishing the keyboard layout out of the kernel (which is a copy of the KCHR resource that the MacOS is currently using) and reverse indexing it, so it can go from character to key codes. No idea what, if anything, this would be useful for outside of this context, but it demonstrates the strength of the classic Mac approach of keeping as much as possible as data-driven tables.
app/macroman.{c,h} are not interesting in and of themselves and were intensely tedious to produce. But they map from X keysyms to MacRoman characters, and may be useful for that incredibly niche use elsewhere, I suppose?
This code is mostly © Rob Mitchelmore, 2022. It started off as a fork of, and some portions remain of, @marciot's mac-minivnc, so portions are © Marcio Teixeira, 2022. I'd also like to acknowledge SolraBizna for the testc driver, linked above, which started me thinking that this might actually be possible.