=====Starting X===== There's a bunch of things that get done by DE's under the covers that you need to straighten out when you're just using a WM like i3 or fluxbox etc. Things like dbus and wallets. These need some attention in the way the WM is started up but I like to do it the old fashioned way - that is explicitly, without relying on bonnet-welded-shut, secret-propriety, dont-scare-the-horses, patronising-we'll take-care-of-you bulldust. Once you've got the startup covered, it's a simple matter of selecting the tools you like. I'll post separately on how I deal with my laptop quirks (detecting and acting on lid, brightness, etc) Firstly it depends how you login. If logging in to a system console and then running 'startx' (or if coming in from VNC) I put this in ~/.xinitrc: #!/usr/bin/env bash # This is called by xinit (or startx or Xvnc). It should set up # everything that is set up by xdm etc. ERRFILE="$HOME/.xsession-errors$DISPLAY" exec &> $ERRFILE set -x XSESSION="$HOME/.xsession" LAUNCHER="dbus-launch" # should maybe use /usr/libexec/at-spi-bus-launcher like lxdm does - but it's only for accessibility ie screen readers etc if type $LAUNCHER &> /dev/null; then LAUNCHER+=" --sh-syntax --exit-with-session" else LAUNCHER=exec fi [ -r "$XSESSION" ] && { chmod +x "$XSESSION" $LAUNCHER "$XSESSION" exit 0 } ... so that gets me (hopefully) to the same point that xdm/gxm/kdm/lxdm whatever would do. Logging in from xdm/gdm etc: I put this into /usr/share/xsessions/xsession.desktop so that the login manager gives me an 'xsession' option as well as whatever DE I have installed: [Desktop Entry] Encoding=UTF-8 Name=XSession Comment=This session will run your ~/.xsession Exec=$HOME/.xsession Icon= Type=Application [Window Manager] SessionManaged=true I have this in ~/.config/desktop so I that .xsession starts the right one: WM=i3 # WM=startfluxbox # WM=starte16 # WM=enlightenment_start # e17 # WM=gnome-session # WM=startkde # WM=fvwm2 # WM=icewm-session # WM=twm # WM=dwm-start # WM=awesome Now for ~/.xsession: {{startup:xsession}} The final piece is to tell VNC what to do: ~/.vnc/xsession: #!/bin/sh #vncconfig -iconic & WM=i3 #WM=startfluxbox #WM=starte16 #WM=enlightenment_start # e17 #WM=gnome-session #WM=mate-session #WM=startkde #WM=fvwm2 #WM=icewm-session #WM=twm #WM=dwm-start #WM=awesome export WM # some remote vnc sessions were seeing this set to an invalid value # (maybe it was for the local system rather than the remote!). unset SSH_AUTH_SOCK XINITRC=$HOME/.xinitrc [ -r "$XINITRC" ] && { chmod +x "$XINITRC" exec "$XINITRC" }