For those who are bored by gdm/kdm/xdm/*dm, here a little how-to with a startx-like method.
emerge layman
In /etc/layman/layman.cfg
Change:
storage : /usr/portage/local/layman to storage : /usr/local/layman nocheck : no to nocheck : yes
Get the overlay list and the xeffects overlay sources :
layman -L layman -a xeffects
Add the overlay dir in /etc/make.conf :
. . . PORTDIR_OVERLAY="/usr/local/layman/xeffects"
Maybe mesa need to be merge with hard-masked sources before merging xgl:
/etc/portage/packages.unmask :
>=media-libs/mesa-6.5.2
emerge mesa xgl
Then, create a new script to start xgl, called startxgl :
cp /usr/bin/startx /usr/bin/startxgl
Open it, and modify the init line to launch xgl with ati drivers options :
xinit $clientargs -- /usr/bin/Xgl -br -ac -accel xv:pbuffer -accel glx:pbuffer - fp /usr/share/fonts/misc $serverargs -deferglyphs 16 &
So, you get the following code :
/usr/bin/startxgl :
#!/bin/sh
# $Xorg: startx.cpp,v 1.3 2000/08/17 19:54:29 cpqbld Exp $
#
# This is just a sample implementation of a slightly less primitive
# interface than xinit. It looks for user .xinitrc and .xserverrc
# files, then system xinitrc and xserverrc files, else lets xinit choose
# its default. The system xinitrc should probably do things like check
# for .Xresources files and merge them in, startup up a window manager,
# and pop a clock and serveral xterms.
#
# Site administrators are STRONGLY urged to write nicer versions.
#
# $XFree86: xc/programs/xinit/startx.cpp,v 3.16tsi Exp $
userclientrc=$HOME/.xinitrc
sysclientrc=/etc/X11/xinit/xinitrc
userserverrc=$HOME/.xserverrc
sysserverrc=/etc/X11/xinit/xserverrc
defaultclientargs=""
defaultserverargs="-nolisten tcp -br"
clientargs=""
serverargs=""
if [ -f $userclientrc ]; then
defaultclientargs=$userclientrc
elif [ -f $sysclientrc ]; then
defaultclientargs=$sysclientrc
fi
if [ -f $userserverrc ]; then
defaultserverargs=$userserverrc
elif [ -f $sysserverrc ]; then
defaultserverargs=$sysserverrc
fi
whoseargs="client"
while [ x"$1" != x ]; do
case "$1" in
/''*|\.*) if [ "$whoseargs" = "client" ]; then
if [ "x$clientargs" = x ]; then
clientargs="$1"
else
clientargs="$clientargs $1"
fi
else
if [ "x$serverargs" = x ]; then
serverargs="$1"
else
serverargs="$serverargs $1"
fi
fi ;;
--) whoseargs="server" ;;
*) if [ "$whoseargs" = "client" ]; then
if [ "x$clientargs" = x ]; then
clientargs="$defaultclientargs $1"
else
clientargs="$clientargs $1"
fi
else
case "$1" in
:[0-9]*) display="$1"; serverargs="$serverargs $1";;
*) serverargs="$serverargs $1" ;;
esac
fi ;;
esac
shift
done
if [ x"$clientargs" = x ]; then
clientargs="$defaultclientargs"
fi
if [ x"$serverargs" = x ]; then
serverargs="$defaultserverargs"
fi
if [ x"$XAUTHORITY" = x ]; then
XAUTHORITY=$HOME/.Xauthority
export XAUTHORITY
fi
removelist=
# set up default Xauth info for this machine
case `uname` in
Linux*)
if [ -z "`hostname --version 2>&1 | grep GNU`" ]; then
hostname=`hostname -f`
else
hostname=`hostname`
fi
;;
*)
hostname=`hostname`
;;
esac
authdisplay=${display:-:0}
mcookie=`/usr/bin/mcookie`
dummy=0
# create a file with auth information for the server. ':0' is a dummy.
xserverauthfile=$HOME/.serverauth.$$
xauth -q -f $xserverauthfile << EOF
add :$dummy . $mcookie
EOF
serverargs=${serverargs}" -auth "${xserverauthfile}
# now add the same credentials to the client authority file
# if '$displayname' already exists do not overwrite it as another
# server man need it. Add them to the '$xserverauthfile' instead.
for displayname in $authdisplay $hostname$authdisplay; do
authcookie=`xauth list "$displayname" \
| sed -n "s/.*$displayname[[:space:]*].*[[:space:]*]//p"` 2>/dev/null;
if [ "z${authcookie}" = "z" ] ; then
xauth -q << EOF
add $displayname . $mcookie
EOF
removelist="$displayname $removelist"
else
dummy=$(($dummy+1));
xauth -q -f $xserverauthfile << EOF
add :$dummy . $authcookie
EOF
fi
done
cleanup() {
[ -n "$PID" ] && kill $PID > /dev/null 2>&1
if [ x"$removelist" != x ]; then
xauth remove $removelist
fi
if [ x"$xserverauthfile" != x ]; then
rm -f $xserverauthfile
fi
if command -v deallocvt > /dev/null 2>&1; then
deallocvt
fi
}
trap cleanup 0
xinit $clientargs -- /usr/bin/Xgl -br -ac -accel xv:pbuffer -accel glx:pbuffer -
fp /usr/share/fonts/misc $serverargs -deferglyphs 16 &
#xinit $clientargs -- /opt/Xgl/bin/Xgl :1 $serverargs -ac -accel glx:pbuffer -a
ccel xv:pbuffer -fp /usr/share/fonts/misc &
PID=$!
wait $PID
unset PID
I have issues with window-decoration when using Compiz, so I choose Beryl, and It does not seems to be a bad choice.
Merge it :
emerge beryl
And create a script to launch Beryl as window-manager when running the previous script :
cd mkdir .config/autostart cd .config/autostart touch beryl-manager.desktop
beryl-manager.desktop :
[Desktop Entry] Name=No name Encoding=UTF-8 Version=1.0 Exec=beryl-manager X-GNOME-Autostart-enabled=true
Now, running Beryl is done with the startxgl command.
keyboard layout.