Orthos DM¶
The X11 Display Manager of my choice. Simplistic design, effective, no need for qt/gtk/other libraries.
Features
- good compatibility and scalability
- simple source code which can be used for studying/hacking purposes
- extreme themeability by programming
Screenshots¶
Please note that the live version is animated, therefore looks thousand times better. See the page Screenshots
Download¶
You can get the latest orthos version with my git. Also please check download section (see at left).
git clone http://repos.e-x-a.org/orthos.git
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¶
Everything is compiled by SCons, so just type scons and it should build itself. If you don't have SCons, google it, or compile sources by hand (which is pretty straightforward, there's no gcc-mania). You need these libraries:
- crypt (because of passwords, you probably have it)
- X11 and Xmu (which you most probably already have as well)
If you use the default OpenGL skin, you will probably need more:
- libGL, libGLU
- libSDL
- FreeType 2
- some ttf-bitstream-vera like font (or at least some other .ttf font which doesn't cause pain to your eyes)
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 on 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
Configuration¶
You might also need to modify available session list, and such things. For this, edit the config file /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
If something goes wrong, turn debug mode on, it should print some additional messages on your vt.
debug yes
Also, you can tune your skin to match your favorite color:
font /usr/share/fonts/ttf-bitstream-vera/veramono.ttf color 0:128:255
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.