orthos | exawebsite

Orthos

The X11 Display Manager of my choice. Simplistic design, effective, no need for qt/gtk/other libraries.

Features

Screenshots

Live version is ANIMATED so try it. Also, colors can be tuned in config.

default skin shards skin

Video of a custom distro running Orthos and then some compiz stuff is found at youtube now, more detailed orthos skinning process demo is here in mpeg-2 or with low quality at youtube. Big thanks to Chameleon for making the movies!

Download

You can get the latest orthos version with my git. Also please check download section (see at left).

#git howto wget http://exa.czweb.org/repos/orthos.git.tar
tar xf orthos.git.tar
cd orthos
git-checkout -f

Be sure that you check for a branch that is marked "stable", as things from master could break your computer (or at least cause some trouble).

Installation

First, please note that this is suited for the latest git master version. If things don't seem to work, please upgrade to it; but basically everything should be similar - just use some common unix sense.

Everything is compiled by SCons, if you don't have it, google it, or compile sources by hand (which is pretty straightforward, there's no gcc-mania). You need these libraries:

If you use some default skins, you will probably need more:

After successful compile, you need to place files to right places. You may run ./install.sh to install them to default locations, but be sure you check it before. If you use some kind of runlevel control system that runs your XDM, you might need to add some config lines for proper orthos support. This is my config at a gentoo box:

/etc/init.d/xdm
...
		gdm|gnome)
			EXE=/usr/bin/gdm
			[ "${RC_UNAME}" != "Linux" ] && NAME=gdm-binary
			PIDFILE=/var/run/gdm.pid
			;;
		wdm)
			EXE=/usr/bin/wdm
			PIDFILE=
			;;
		orthos)
			EXE=/usr/local/bin/orthos
			PIDFILE=
			;;
		*)
			EXE=
			# Fix #65586, where MY_XDM is empty so EXE=somedir
			[ -x "/usr/bin/${MY_XDM}" ] && [ -f "/usr/bin/${MY_XDM}" ] \
				&& EXE="/usr/bin/${MY_XDM}"
			if [ -z "${EXE}" ] ; then
				EXE=/usr/bin/xdm
				PIDFILE=/var/run/xdm.pid
			fi
			;;
	esac
...

After this, you can simply add orthos to your runlevel:

rc-update add xdm default

You might also need to modify available session list, and such things.

/etc/orthos.conf
please note that names and values are TAB separated

Xserver	/usr/bin/Xorg
skin	/usr/local/lib/orthos/libdefault.so
server_args	vt07 -nolisten tcp
sessions	e16:/usr/bin/e16:twm:/usr/bin/twm:failsafe:/usr/bin/xterm
possibly better method is to symlink the skin from /etc:
skin	/etc/orthos.skin
You might need to set debug mode if you dont know whats wrong. This is especially usuable if you are tuning some of your skins. (it just doesn't close stdout when forking)
debug	yes
Lets tune the skin a little:
font	/usr/share/fonts/ttf-bitstream-vera/veramono.ttf
color	0:128:255

NOTE

If you miss reboot/shutdown buttons in the default skin, hit escape!

Known issues, security warnings

Orthos was designed to avoid frequent X11 restarts, so it doesn't kill X server after the session ends, which means that next session (AND orthos itself) runs with the SAME xauth as the last session. This makes orthos EXTREMELY INSECURE for any public use, so please avoid it. People who wish to restart X11 server after the session must set restart_after_session yes configuration option.

Some Xorg weirdness still prevents orthos from correct restarting when Xorg is killed on the login screen, should be fixed soon

No matrix-like skin has been made yet. This is critical problem!

With all of this, orthos is mostly for adventurous people, others will probably just delete it right away :D

Custom skin creation

As you may have noticed now, skins have the form of .so loadable shared libraries. That means the skin can do virtually everything, any matrix effect, any eye-burning candy. Default skin source file (skins/default.cpp) should be pretty easy to read and understand, anyone with some programming experience should be able to write something similar. Interface skin<->orthos is also very easy to use, it's represented by less than 10 functions. See include/skin.h for details.

Please note that every skin should include provided 'skin.h' header file because of compatibility!

include/skin.h - the skinning api
//these functions should be implemented by the skin:
	//load/unload; called only once
	int orthos_skin_init (int x, int y,
		orthos_validate_login_func,
		orthos_do_login_func,
		orthos_action_func,
		orthos_get_config_func);
	int orthos_skin_fini();

	//showing start/stop; called once per session.
	//This should reset variables etc...
	int orthos_skin_start ();
	int orthos_skin_stop ();

	int orthos_skin_update ();
		//regular update, skin also renders the stuff here.
		//should return 0 when finished, 1 when needs another frame,
		//anything other on fatal error. Must handle timing itself.
		//
		//it's handled like this:
		//o_s_start();
		//while((r=o_s_update())==1); if(r) {error();}
		//o_s_stop();

//these are exported to the skin:

	int orthos_validate_login (const char*name, const char*pw);
	//returns 0 if login is valid
	//if it IS valid, then the login data is stored
	//in the core. Skin usually plays a wonderful animation
	//of login success and then calls this:

	int orthos_do_login (const char*name, const char* session);
	//which terminates all (causing the call of orthos_skin_stop())
	//and runs the plugin environment.

	int orthos_action (const char* command);
	//performs an action by running the command as root.
	//orthos_skin_fini is called, orthos gets terminated and command
	//is then executed. Usuable for shutdown/reboot things.

	const char* orthos_get_config (const char*);
	//returns the parsed config from config file

Q: I made a wonderful skin, I want to share it.

Mail me with subject 'orthos skin submission' and provide a patch against some current git tree (see git howto page for details). I will check the skin for rootkits and/or possibility of eye burns (;D) and most probably add it to official tree.

Q: Can I make a skin without OpenGL?

Yeah, you can do everything. In fact, as we don't have any slow-hardware-friendly skin yet, I would appreciate a simple X11-only skin. Too bad I'm not really good at X11 coding.

Q: Can I somehow quit the forced event-loop of orthos_skin_update() function calls?

Yes, simply do your own event loop in orthos_skin_update(), and return 0. Remember _not_ to return 1, it will run the thing again!

Doesn't work? Issues? Feature request?

Turn debug mode on. Watch it. Mail me.

last modification: 2009-03-16 12:15:47 +0100