diff --git a/x11-apps/xinit/Manifest b/x11-apps/xinit/Manifest new file mode 100644 index 000000000..b07fa3397 --- /dev/null +++ b/x11-apps/xinit/Manifest @@ -0,0 +1,20 @@ +AUX 00-xhost 134 RMD160 b38bdf52c524e4322a42281b604b70f0364b1741 SHA1 9534d2ddfffd4379023694587e8d9d97f99dfb69 SHA256 9ca152c3d8e36dce650e890fb4e2acbd9c1019794ef6dc20b69a429928bd7097 +AUX Xsession 2187 RMD160 ffb290e9a8656b17d7744797456a45df53cafd79 SHA1 8ba8de5114871f8500f428a03f87a42714d0ce14 SHA256 bdf2cceaafb71762bc1c6491f9bd8cc24089dea7ef65b0a030acadf7f4aa4ab3 +AUX chooser.sh 1496 RMD160 4d474c23dc10f2f33006885305002df7fd3197f9 SHA1 7e8f6a8238add6a1501964821d0b3ffd1ad92b80 SHA256 70bde060d86c313b90ab21a8eb9b101b08637297a1a5b4dec13e1c305ec4d1e8 +AUX gentoo-startx-customization-1.0.4.patch 3863 RMD160 65d35c3aaf72861dbf393bb23aaac97763725891 SHA1 ab0acf592dfbdfe961489f3a417be350aefac1dd SHA256 eb0a88592a22203c9e7cb4ea3051f2b96adb244585ae4b990b384b6d8a35559c +AUX gentoo-startx-customization-1.0.8.patch 3953 RMD160 cf0bc0b1439437b8a92a1f569445e8fbef1bb1cd SHA1 8020676fe7c9a2fed0c2a09cea0c273984a3cdc0 SHA256 29d6a004240672b86d6cc34e9cab5dcc88abcb84974d98b1085a9eb0dc852f38 +AUX nolisten-tcp-and-black-background.patch 381 RMD160 f767995059b6b3826e662ad71fd9348609383dc2 SHA1 8210062a9e3bac93e9d5b0a18633e6a98a6829f4 SHA256 481252dd205a0eefcfdf1a265b2c359280363ceaf1460ca5eab42b9eb3b3c826 +AUX startDM.sh 858 RMD160 d7ef866ddd09e3d4117b3363aaa6382a9b8cd153 SHA1 1b826dfb4d5a184d6d7cc1995d685b55c9c188ac SHA256 a7aca1e37e5b8fecb49aa96c4e2850547a47e154edabcdbd1cfcb8ab49337549 +AUX xdm-setup.initd-1 346 RMD160 7d769710e1089b428457a775f73a0979de595da0 SHA1 cba117701f6e414c0aee6d936afdf9f609bfdd19 SHA256 99a569b9e342f3a9d6319e6e32bd765dc03e116c92d8eb4217ff6b6eeab2ea1c +AUX xdm.confd-1 722 RMD160 3a4f800a37935e711112ede9c847837104e4100f SHA1 d3b2551ec7be8e5cfa42cc14e1d47ab37ac9f116 SHA256 1f6a2bb28e499698bbdba825d6dcbc81622579b1cf5c9e33538b252d254935c3 +AUX xdm.initd-1 5207 RMD160 c95d2df2feff76770ece8f0ec86e9bb53d76a257 SHA1 faefdeeca446fff29da2f4e546a3b0bcc94e6372 SHA256 891c7b060c6b47c135b32ffd918a0b6add5e9c7c03893ee0c1d56b64bd7987ea +AUX xdm.initd-2 5455 RMD160 d88b99f7b4e7f181ad7c5ee817b881e0f2f797b6 SHA1 d3656459d81e195e7c8d829f82d7a9a32f26592f SHA256 ea6567021649df1084e2bc136a12a067b8bdf70e44978c6e3560e37d47141a23 +AUX xdm.initd-3 5333 RMD160 ff474273d00ba8388a945a51946714b45cf778d6 SHA1 29c67fd05e4596f2e980ce8b87d31c7cbfc7d8fc SHA256 ab688e8508a100cbe10230c216476bd6c068ae6f15b9361274eda762a6c59419 +AUX xdm.start 3974 RMD160 67f3b69fc9c006146999271935e1ae06d093130a SHA1 12763e84e31632c0421159e8feca2f9855966b7b SHA256 151b697f62e335850118a5d7d113d83fb37f2a75407985cd1e433de93eb55ded +AUX xinit-1.0.4-console-kit.patch 4956 RMD160 286437f158d6a9ec588377b01d2b336d391bff37 SHA1 8d1ef61ec11bdf0308474560f0ed5156a6714d5f SHA256 65fd0800ccdecca979c8943755c5656fd022b54a160b32489ad95495521949e4 +AUX xinitrc 1059 RMD160 3f3ae64f6056055d3d42e471a5dd4263aa1b66db SHA1 edd6919448086273a73b1de897afe93e01b046c8 SHA256 53871c9c3198b38d73b08da3837d1331240a5d45e987a5b8135e7116c02d8eff +AUX xserver.pamd 125 RMD160 4b75f8bf5e68ac7181a22beaccc153ac250eb8e9 SHA1 e35845021328044659036b9f82a95c17f21beb25 SHA256 f179c3417b94295fe12776f9da4a08898a3ee4199e26abff6457717caeb29bb2 +AUX xsession.env.d 1146 RMD160 876f5de1da358d796cbc6563e29cb9832e150e24 SHA1 d9390b8c4b4432e2e0131bec686c14557086a534 SHA256 56c732b131072376e8649efd16072461b21c9973d89bb125c95d793002c1a924 +DIST xinit-1.0.8.tar.bz2 117049 RMD160 d01b299e6e96c2b5318aaec479c81670b94e2129 SHA1 0102d2fdc0df3d24077ba826cf57640da46140af SHA256 06c1049f6b63d1c368a1e03e2392097919b22ff24899e190de3577bffe6fe524 +EBUILD xinit-1.0.8-r7.ebuild 2304 RMD160 d6c0f4d1dc879ac801b54d90f88240f0c0d8d2ed SHA1 8567db06a56baf6abf861038cb54aac3a8cb1e7d SHA256 e4932c96bef271428167abab6b9048521a49e6baed74e5b4f568e16f113a21cc +MISC Reasons 97 RMD160 a02c92052f8ec42ead47577b237d6a3329630007 SHA1 3805c1939206ba5982678e746bd737337042d03d SHA256 c68f00fa52d10ff345234867e98adaef7d38988e5e76fbafd9221ecd6fe6eda2 diff --git a/x11-apps/xinit/Reasons b/x11-apps/xinit/Reasons new file mode 100644 index 000000000..a801944a2 --- /dev/null +++ b/x11-apps/xinit/Reasons @@ -0,0 +1,2 @@ +# Fabio Erculiani +Add our 00-xhost env file to fix hostname changes bug diff --git a/x11-apps/xinit/files/00-xhost b/x11-apps/xinit/files/00-xhost new file mode 100755 index 000000000..129dd54d2 --- /dev/null +++ b/x11-apps/xinit/files/00-xhost @@ -0,0 +1,3 @@ +#!/bin/sh +# This makes hostname changes bullet-proof. We can consider safe to allow any local user to connect to the X server +xhost + diff --git a/x11-apps/xinit/files/Xsession b/x11-apps/xinit/files/Xsession new file mode 100755 index 000000000..c86ccee19 --- /dev/null +++ b/x11-apps/xinit/files/Xsession @@ -0,0 +1,107 @@ +#!/bin/sh +# $XConsortium: Xsession /main/10 1995/12/18 18:21:28 gildea $ + +case $# in +1) + case $1 in + failsafe) + exec xterm -geometry 80x24-0-0 + ;; + esac +esac + +# redirect errors to a file in user's home directory if we can +for errfile in "$HOME/.xsession-errors" "${TMPDIR-/tmp}/xses-$USER" "/tmp/xses-$USER" +do + if ( cp /dev/null "$errfile" 2> /dev/null ) + then + chmod 600 "$errfile" + exec > "$errfile" 2>&1 + break + fi +done + +# clean up after xbanner +if which freetemp 2> /dev/null ; then + freetemp +fi + +startup=$HOME/.xsession + +userresources=$HOME/.Xresources +usermodmap=$HOME/.Xmodmap +userxkbmap=$HOME/.Xkbmap + +sysresources=/etc/X11/Xresources +sysmodmap=/etc/X11/Xmodmap +sysxkbmap=/etc/X11/Xkbmap + +rh6sysresources=/etc/X11/xinit/Xresources +rh6sysmodmap=/etc/X11/xinit/Xmodmap + + +# merge in defaults +if [ -f "$rh6sysresources" ]; then + xrdb -merge "$rh6sysresources" +fi + +if [ -f "$sysresources" ]; then + xrdb -merge "$sysresources" +fi + +if [ -f "$userresources" ]; then + xrdb -merge "$userresources" +fi + +# merge in keymaps +if [ -f "$sysxkbmap" ]; then + setxkbmap `cat "$sysxkbmap"` + XKB_IN_USE=yes +fi + +if [ -f "$userxkbmap" ]; then + setxkbmap `cat "$userxkbmap"` + XKB_IN_USE=yes +fi + +# +# Eeek, this seems like too much magic here +# +if [ -z "$XKB_IN_USE" -a ! -L /etc/X11/X ]; then + if grep '^exec.*/Xsun' /etc/X11/X > /dev/null 2>&1 && [ -f /etc/X11/XF86Config ]; then + xkbsymbols=`sed -n -e 's/^[ ]*XkbSymbols[ ]*"\(.*\)".*$/\1/p' /etc/X11/XF86Config` + if [ -n "$xkbsymbols" ]; then + setxkbmap -symbols "$xkbsymbols" + XKB_IN_USE=yes + fi + fi +fi + +# xkb and xmodmap don't play nice together +if [ -z "$XKB_IN_USE" ]; then + if [ -f "$rh6sysmodmap" ]; then + xmodmap "$rh6sysmodmap" + fi + + if [ -f "$sysmodmap" ]; then + xmodmap "$sysmodmap" + fi + + if [ -f "$usermodmap" ]; then + xmodmap "$usermodmap" + fi +fi + +unset XKB_IN_USE + +if [ -x "$startup" ]; then + exec "$startup" +elif [ -x "$HOME/.Xclients" ]; then + exec "$HOME/.Xclients" +elif [ -x /etc/X11/xinit/Xclients ]; then + exec /etc/X11/xinit/Xclients +elif [ -x /etc/X11/Xclients ]; then + exec /etc/X11/Xclients +else + exec xsm +fi diff --git a/x11-apps/xinit/files/chooser.sh b/x11-apps/xinit/files/chooser.sh new file mode 100755 index 000000000..b22153608 --- /dev/null +++ b/x11-apps/xinit/files/chooser.sh @@ -0,0 +1,61 @@ +#!/bin/sh +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 +# Author: Martin Schlemmer +# $Header: /var/cvsroot/gentoo-x86/x11-apps/xinit/files/chooser.sh,v 1.4 2006/09/05 23:22:13 dberkholz Exp $ + +# If $XSESSION is "", source first /etc/conf.d/basic, and then /etc/rc.conf +if [ -z "${XSESSION}" ] +then + [ -f /etc/conf.d/basic ] && . /etc/conf.d/basic + [ -f /etc/rc.conf ] && . /etc/rc.conf +fi + +# Find a match for $XSESSION in /etc/X11/Sessions +GENTOO_SESSION="" +for x in /etc/X11/Sessions/* +do + if [ "`echo ${x##*/} | awk '{ print toupper($1) }'`" \ + = "`echo ${XSESSION} | awk '{ print toupper($1) }'`" ] + then + GENTOO_SESSION=${x} + break + fi +done + +GENTOO_EXEC="" + +if [ -n "${XSESSION}" ]; then + if [ -f /etc/X11/Sessions/${XSESSION} ]; then + if [ -x /etc/X11/Sessions/${XSESSION} ]; then + GENTOO_EXEC="/etc/X11/Sessions/${XSESSION}" + else + GENTOO_EXEC="/bin/sh /etc/X11/Sessions/${XSESSION}" + fi + elif [ -n "${GENTOO_SESSION}" ]; then + if [ -x "${GENTOO_SESSION}" ]; then + GENTOO_EXEC="${GENTOO_SESSION}" + else + GENTOO_EXEC="/bin/sh ${GENTOO_SESSION}" + fi + else + x="" + y="" + + for x in "${XSESSION}" \ + "`echo ${XSESSION} | awk '{ print toupper($1) }'`" \ + "`echo ${XSESSION} | awk '{ print tolower($1) }'`" + do + # Fall through ... + if [ -x "`which ${x} 2>/dev/null`" ]; then + GENTOO_EXEC="`which ${x} 2>/dev/null`" + break + fi + done + fi +fi + +echo "${GENTOO_EXEC}" + + +# vim:ts=4 diff --git a/x11-apps/xinit/files/gentoo-startx-customization-1.0.4.patch b/x11-apps/xinit/files/gentoo-startx-customization-1.0.4.patch new file mode 100644 index 000000000..16ef63fbd --- /dev/null +++ b/x11-apps/xinit/files/gentoo-startx-customization-1.0.4.patch @@ -0,0 +1,148 @@ +diff -urN xinit-1.0.4.orig/startx.cpp xinit-1.0.4/startx.cpp +--- xinit-1.0.4.orig/startx.cpp 2007-07-13 21:54:34.000000000 -0700 ++++ xinit-1.0.4/startx.cpp 2007-07-13 21:55:49.000000000 -0700 +@@ -64,8 +64,6 @@ + + userserverrc=$HOME/.xserverrc + sysserverrc=XINITDIR/xserverrc +-defaultclient=XTERM +-defaultserver=XSERVER + defaultclientargs="" + defaultserverargs="" + clientargs="" +@@ -107,60 +105,41 @@ + whoseargs="client" + while [ x"$1" != x ]; do + case "$1" in +- XCOMM '' required to prevent cpp from treating "/*" as a C comment. +- /''*|\./''*) +- if [ "$whoseargs" = "client" ]; then +- if [ x"$clientargs" = x ]; then +- client="$1" +- else +- clientargs="$clientargs $1" +- fi +- else +- if [ x"$serverargs" = x ]; then +- server="$1" +- else +- serverargs="$serverargs $1" +- fi +- fi +- ;; +- --) +- whoseargs="server" +- ;; +- *) +- if [ "$whoseargs" = "client" ]; then +- clientargs="$clientargs $1" +- else +- XCOMM display must be the FIRST server argument +- if [ x"$serverargs" = x ] && @@ +- expr "$1" : ':[0-9][0-9]*$' > /dev/null 2>&1; then +- display="$1" +- else +- serverargs="$serverargs $1" +- fi +- fi +- ;; ++ /''*|\.*) 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 + +-XCOMM process client arguments +-if [ x"$client" = x ]; then +- XCOMM if no client arguments either, use rc file instead +- if [ x"$clientargs" = x ]; then +- client="$defaultclientargs" +- else +- client=$defaultclient +- fi ++if [ x"$clientargs" = x ]; then ++ clientargs="$defaultclientargs" + fi +- +-XCOMM process server arguments +-if [ x"$server" = x ]; then +- XCOMM if no server arguments or display either, use rc file instead +- if [ x"$serverargs" = x -a x"$display" = x ]; then +- server="$defaultserverargs" +- else +- server=$defaultserver +- fi ++if [ x"$serverargs" = x ]; then ++ serverargs="$defaultserverargs" + fi + + if [ x"$XAUTHORITY" = x ]; then +@@ -217,15 +196,8 @@ + + #endif + +-#if defined(__SCO__) || defined(__UNIXWARE__) +-if [ "$REMOTE_SERVER" = "TRUE" ]; then +- exec SHELL_CMD ${client} +-else +- XINIT $client $clientargs -- $server $display $serverargs +-fi +-#else +-XINIT $client $clientargs -- $server $display $serverargs +-#endif ++cleanup() { ++ [ -n "$PID" ] && kill $PID > /dev/null 2>&1 + + if [ x"$removelist" != x ]; then + XAUTH remove $removelist +@@ -251,3 +223,15 @@ + #if defined(sun) + kbd_mode -a + #endif ++} ++ ++ ++trap cleanup 0 ++ ++xinit $clientargs -- $serverargs -deferglyphs 16 & ++ ++PID=$! ++ ++wait $PID ++ ++unset PID +diff -urN xinit-1.0.4.orig/xinit.c xinit-1.0.4/xinit.c +--- xinit-1.0.4.orig/xinit.c 2007-07-13 21:54:34.000000000 -0700 ++++ xinit-1.0.4/xinit.c 2007-07-13 21:59:14.000000000 -0700 +@@ -423,6 +423,7 @@ + sigaction(SIGINT, &sa, NULL); + sigaction(SIGHUP, &sa, NULL); + sigaction(SIGPIPE, &sa, NULL); ++ sigaction(SIGTERM, &sa, NULL); + + signal(SIGALRM, sigAlarm); + signal(SIGUSR1, sigUsr1); diff --git a/x11-apps/xinit/files/gentoo-startx-customization-1.0.8.patch b/x11-apps/xinit/files/gentoo-startx-customization-1.0.8.patch new file mode 100644 index 000000000..c78283d8c --- /dev/null +++ b/x11-apps/xinit/files/gentoo-startx-customization-1.0.8.patch @@ -0,0 +1,151 @@ +diff -urN xinit-1.0.8.orig/startx.cpp xinit-1.0.8/startx.cpp +--- xinit-1.0.8.orig/startx.cpp 2008-03-08 21:26:55.000000000 -0800 ++++ xinit-1.0.8/startx.cpp 2008-03-08 21:27:32.000000000 -0800 +@@ -71,8 +71,6 @@ + + userserverrc=$HOME/.xserverrc + sysserverrc=XINITDIR/xserverrc +-defaultclient=XTERM +-defaultserver=XSERVER + defaultclientargs="" + defaultserverargs="-nolisten tcp -br" + clientargs="" +@@ -158,63 +156,44 @@ + whoseargs="client" + while [ x"$1" != x ]; do + case "$1" in +- XCOMM '' required to prevent cpp from treating "/*" as a C comment. +- /''*|\./''*) +- if [ "$whoseargs" = "client" ]; then +- if [ x"$clientargs" = x ]; then +- client="$1" +- else +- clientargs="$clientargs $1" +- fi +- else +- if [ x"$serverargs" = x ]; then +- server="$1" +- else +- serverargs="$serverargs $1" +- fi +- fi +- ;; +- --) +- whoseargs="server" +- ;; +- *) +- if [ "$whoseargs" = "client" ]; then +- clientargs="$clientargs $1" +- else +- XCOMM display must be the FIRST server argument +- if [ x"$serverargs" = x ] && @@ +- expr "$1" : ':[0-9][0-9]*$' > /dev/null 2>&1; then +- display="$1" +- else +- serverargs="$serverargs $1" +- fi +- fi +- ;; ++ /''*|\.*) 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 + +-XCOMM process client arguments +-if [ x"$client" = x ]; then +- XCOMM if no client arguments either, use rc file instead +- if [ x"$clientargs" = x ]; then +- client="$defaultclientargs" +- else +- client=$defaultclient +- fi ++if [ x"$clientargs" = x ]; then ++ clientargs="$defaultclientargs" + fi +- +-XCOMM process server arguments +-if [ x"$server" = x ]; then +- XCOMM if no server arguments or display either, use rc file instead +- if [ x"$serverargs" = x -a x"$display" = x ]; then +- server="$defaultserverargs" ++if [ x"$serverargs" = x ]; then ++ serverargs="$defaultserverargs" + #ifdef __APPLE__ + display="$defaultdisplay" + #endif +- else +- server=$defaultserver +- fi + fi + + if [ x"$enable_xauth" = x1 ] ; then +@@ -279,15 +258,8 @@ + done + fi + +-#if defined(__SCO__) || defined(__UNIXWARE__) +-if [ "$REMOTE_SERVER" = "TRUE" ]; then +- exec SHELL_CMD ${client} +-else +- XINIT $client $clientargs -- $server $display $serverargs +-fi +-#else +-XINIT $client $clientargs -- $server $display $serverargs +-#endif ++cleanup() { ++ [ -n "$PID" ] && kill $PID > /dev/null 2>&1 + + if [ x"$enable_xauth" = x1 ] ; then + if [ x"$removelist" != x ]; then +@@ -315,3 +287,15 @@ + #if defined(sun) + kbd_mode -a + #endif ++} ++ ++ ++trap cleanup 0 ++ ++xinit $clientargs -- $serverargs -deferglyphs 16 & ++ ++PID=$! ++ ++wait $PID ++ ++unset PID +diff -urN xinit-1.0.8.orig/xinit.c xinit-1.0.8/xinit.c +--- xinit-1.0.8.orig/xinit.c 2008-03-08 21:26:55.000000000 -0800 ++++ xinit-1.0.8/xinit.c 2008-03-08 21:27:06.000000000 -0800 +@@ -479,6 +479,7 @@ + sigaction(SIGINT, &sa, NULL); + sigaction(SIGHUP, &sa, NULL); + sigaction(SIGPIPE, &sa, NULL); ++ sigaction(SIGTERM, &sa, NULL); + + signal(SIGALRM, sigAlarm); + signal(SIGUSR1, sigUsr1); diff --git a/x11-apps/xinit/files/nolisten-tcp-and-black-background.patch b/x11-apps/xinit/files/nolisten-tcp-and-black-background.patch new file mode 100644 index 000000000..ab7f9600b --- /dev/null +++ b/x11-apps/xinit/files/nolisten-tcp-and-black-background.patch @@ -0,0 +1,12 @@ +diff -urN xinit-0.99.0/startx.cpp xinit-0.99.0/startx.cpp +--- xinit-0.99.0/startx.cpp 2003-09-15 04:24:58.000000000 -0400 ++++ xinit-0.99.0/startx.cpp 2003-09-15 04:28:50.000000000 -0400 +@@ -53,7 +53,7 @@ + sysclientrc=XINITDIR/xinitrc + sysserverrc=XINITDIR/xserverrc + defaultclientargs="" +-defaultserverargs="" ++defaultserverargs="-nolisten tcp -br" + clientargs="" + serverargs="" + diff --git a/x11-apps/xinit/files/startDM.sh b/x11-apps/xinit/files/startDM.sh new file mode 100755 index 000000000..9775b07ff --- /dev/null +++ b/x11-apps/xinit/files/startDM.sh @@ -0,0 +1,30 @@ +#!/bin/sh +# Copyright 1999-2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 +# $Header: /var/cvsroot/gentoo-x86/x11-apps/xinit/files/startDM.sh,v 1.4 2007/04/05 15:30:19 uberlord Exp $ + +# We need to source /etc/profile for stuff like $LANG to work +# bug #10190. +. /etc/profile + +. /etc/init.d/functions.sh + +# baselayout-1 compat +if ! type get_options >/dev/null 2>/dev/null ; then + [ -r "${svclib}"/sh/rc-services.sh ] && . "${svclib}"/sh/rc-services.sh +fi + +# Great new Gnome2 feature, AA +# We enable this by default +export GDK_USE_XFT=1 + +export SVCNAME=xdm +EXEC="$(get_options service)" +NAME="$(get_options name)" +PIDFILE="$(get_options pidfile)" + +start-stop-daemon --start --exec ${EXEC} \ +${NAME:+--name} ${NAME} ${PIDFILE:+--pidfile} ${PIDFILE} || \ +eerror "ERROR: could not start the Display Manager" + +# vim:ts=4 diff --git a/x11-apps/xinit/files/xdm-setup.initd-1 b/x11-apps/xinit/files/xdm-setup.initd-1 new file mode 100644 index 000000000..3e03cfdc2 --- /dev/null +++ b/x11-apps/xinit/files/xdm-setup.initd-1 @@ -0,0 +1,14 @@ +#!/sbin/runscript +# Copyright 1999-2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/x11-apps/xinit/files/xdm-setup.initd-1,v 1.2 2009/09/17 16:30:22 williamh Exp $ + +depend() { + need localmount +} + +start() { + if get_bootparam "nox" ; then + touch /etc/init.d/.noxdm + fi +} diff --git a/x11-apps/xinit/files/xdm.confd-1 b/x11-apps/xinit/files/xdm.confd-1 new file mode 100644 index 000000000..aa1219e02 --- /dev/null +++ b/x11-apps/xinit/files/xdm.confd-1 @@ -0,0 +1,12 @@ +# We always try and start X on a static VT. The various DMs normally default +# to using VT7. If you wish to use the xdm init script, then you should ensure +# that the VT checked is the same VT your DM wants to use. We do this check to +# ensure that you have't accidently configured something to run on the VT +# in your /etc/inittab file so that you don't get a dead keyboard. +CHECKVT=7 + +# What display manager do you use ? [ xdm | gdm | kdm | kdm-3.5 | kdm-4.0 | gpe | entrance ] +# NOTE: If this is set in /etc/rc.conf, that setting will override this one. +# KDE-specific note: kdm-3.5 and kdm-4.0 are just examples. You will find all +# possible versions by looking at the directories in /usr/kde/. +DISPLAYMANAGER="xdm" diff --git a/x11-apps/xinit/files/xdm.initd-1 b/x11-apps/xinit/files/xdm.initd-1 new file mode 100755 index 000000000..6cd1c78b3 --- /dev/null +++ b/x11-apps/xinit/files/xdm.initd-1 @@ -0,0 +1,204 @@ +#!/sbin/runscript +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 +# $Header: /var/cvsroot/gentoo-x86/x11-apps/xinit/files/xdm.initd-1,v 1.4 2008/01/13 22:27:32 philantrop Exp $ + +# This is here to serve as a note to myself, and future developers. +# +# Any Display manager (gdm,kdm,xdm) has the following problem: if +# it is started before any getty, and no vt is specified, it will +# usually run on vt2. When the getty on vt2 then starts, and the +# DM is already started, the getty will take control of the keyboard, +# leaving us with a "dead" keyboard. +# +# Resolution: add the following line to /etc/inittab +# +# x:a:once:/etc/X11/startDM.sh +# +# and have /etc/X11/startDM.sh start the DM in daemon mode if +# a lock is present (with the info of what DM should be started), +# else just fall through. +# +# How this basically works, is the "a" runlevel is a additional +# runlevel that you can use to fork processes with init, but the +# runlevel never gets changed to this runlevel. Along with the "a" +# runlevel, the "once" key word means that startDM.sh will only be +# run when we specify it to run, thus eliminating respawning +# startDM.sh when "xdm" is not added to the default runlevel, as was +# done previously. +# +# This script then just calls "telinit a", and init will run +# /etc/X11/startDM.sh after the current runlevel completes (this +# script should only be added to the actual runlevel the user is +# using). +# +# Martin Schlemmer +# aka Azarah +# 04 March 2002 + + +# Start X Font Server before X +depend() { + need localmount + + # this should start as early as possible + # we can't do 'before *' as that breaks it + # (#139824) Start after ypbind and autofs for network authentication + # (#145219) Could use lirc mouse as input device + # (#70689 comment #92) Start after consolefont to avoid display corruption + after bootmisc consolefont modules netmount + after readahead-list ypbind autofs openvpn gpm lircd + before alsasound + + # Start before X + use acpid consolekit hald xfs +} + +setup_dm() { + local MY_XDM="$(echo "${DISPLAYMANAGER}" | tr '[:upper:]' '[:lower:]')" + + # Load our root path from profile.env + # Needed for kdm + PATH="${PATH}:$(. /etc/profile.env; echo "${ROOTPATH}")" + + case "${MY_XDM}" in + kdm|kde|kde2|kde3) + EXE="$(which kdm)" + # kdm takes too long to create a pidfile for baselayout-2 + #PIDFILE=/var/run/kdm.pid + PIDFILE= + ;; + kdm-*) + EXE="/usr/kde/${MY_XDM#kdm-}/bin/kdm" + PIDFILE= + ;; + entrance*) + EXE=/usr/sbin/entranced + PIDFILE=/var/lib/entranced.pid + ;; + gdm|gnome) + EXE=/usr/bin/gdm + [ "${RC_UNAME}" != "Linux" ] && NAME=gdm-binary + PIDFILE=/var/run/gdm.pid + ;; + wdm) + EXE=/usr/bin/wdm + 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 + + if ! [ -x "${EXE}" ] ; then + EXE=/usr/bin/xdm + PIDFILE=/var/run/xdm.pid + fi +} + +cmdline_opt() { + if [ $# -ne 1 ] || ! [ -r /proc/cmdline ]; then + return 1 + fi + + for opt in $(cat /proc/cmdline) ; do + [ "${opt}" = "${1}" ] && return 0 + done + + return 1 +} + +# Check to see if something is defined on our VT +vtstatic() { + if [ -e /etc/inittab ] ; then + grep -Eq "^[^#]+.*\" /etc/inittab + elif [ -e /etc/ttys ] ; then + grep -q "^ttyv$(($1 - 1))" /etc/ttys + else + return 1 + fi +} + +start() { + local EXE= NAME= PIDFILE= + setup_dm + + if cmdline_opt nox ; then + einfo "Skipping ${EXE}, received 'nox'" + return 0 + fi + + ebegin "Setting up ${EXE##*/}" + #save the prefered DM + save_options "service" "${EXE}" + save_options "name" "${NAME}" + save_options "pidfile" "${PIDFILE}" + + if [ -n "${CHECKVT-y}" ] ; then + if vtstatic "${CHECKVT:-7}" ; then + if [ -x /sbin/telinit ] && [ "${SOFTLEVEL}" != "BOOT" ] && [ "${RC_SOFTLEVEL}" != "BOOT" ] ; then + ewarn "Something is already defined on VT ${CHECKVT:-7}, will start X later" + telinit a >/dev/null 2>/dev/null + return 0 + else + eerror "Something is already defined on VT ${CHECKVT:-7}, not starting" + return 1 + fi + fi + fi + + /etc/X11/startDM.sh + eend 0 +} + +stop() { + local retval=0 + local curvt= + if [ -t 0 ] ; then + if type fgconsole >/dev/null 2>/dev/null ; then + curvt="$(fgconsole 2>/dev/null)" + else + curvt="$(tty)" + case "${curvt}" in + /dev/ttyv[0-9]*) curvt="${curvt#/dev/ttyv*}" ;; + *) curvt= ;; + esac + fi + fi + local myexe="$(get_options "service")" + local myname="$(get_options "name")" + local mypidfile="$(get_options "pidfile")" + local myservice=${myexe##*/} + + [ -z "${myexe}" ] && return 0 + + ebegin "Stopping ${myservice}" + + if start-stop-daemon --quiet --test --stop --exec "${myexe}" ; then + start-stop-daemon --stop --exec "${myexe}" --retry TERM/5/TERM/5 \ + ${mypidfile:+--pidfile} ${mypidfile} \ + ${myname:+--name} ${myname} + retval=$? + fi + + # switch back to original vt + if [ -n "${curvt}" ] ; then + if type chvt >/dev/null 2>/dev/null ; then + chvt "${curvt}" + else + vidcontrol -s "$((${curvt} + 1))" + fi + fi + eend ${retval} "Error stopping ${myservice}" + + return ${retval} +} + +# vim: set ts=4 : diff --git a/x11-apps/xinit/files/xdm.initd-2 b/x11-apps/xinit/files/xdm.initd-2 new file mode 100755 index 000000000..95da3a7f5 --- /dev/null +++ b/x11-apps/xinit/files/xdm.initd-2 @@ -0,0 +1,213 @@ +#!/sbin/runscript +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 +# $Header: /var/cvsroot/gentoo-x86/x11-apps/xinit/files/xdm.initd-2,v 1.3 2009/08/31 09:09:18 scarabeus Exp $ + +# This is here to serve as a note to myself, and future developers. +# +# Any Display manager (gdm,kdm,xdm) has the following problem: if +# it is started before any getty, and no vt is specified, it will +# usually run on vt2. When the getty on vt2 then starts, and the +# DM is already started, the getty will take control of the keyboard, +# leaving us with a "dead" keyboard. +# +# Resolution: add the following line to /etc/inittab +# +# x:a:once:/etc/X11/startDM.sh +# +# and have /etc/X11/startDM.sh start the DM in daemon mode if +# a lock is present (with the info of what DM should be started), +# else just fall through. +# +# How this basically works, is the "a" runlevel is a additional +# runlevel that you can use to fork processes with init, but the +# runlevel never gets changed to this runlevel. Along with the "a" +# runlevel, the "once" key word means that startDM.sh will only be +# run when we specify it to run, thus eliminating respawning +# startDM.sh when "xdm" is not added to the default runlevel, as was +# done previously. +# +# This script then just calls "telinit a", and init will run +# /etc/X11/startDM.sh after the current runlevel completes (this +# script should only be added to the actual runlevel the user is +# using). +# +# Martin Schlemmer +# aka Azarah +# 04 March 2002 + + +# Start X Font Server before X +depend() { + need localmount + + # this should start as early as possible + # we can't do 'before *' as that breaks it + # (#139824) Start after ypbind and autofs for network authentication + # (#145219 #180163) Could use lirc mouse as input device + # (#70689 comment #92) Start after consolefont to avoid display corruption + after bootmisc consolefont modules netmount + after readahead-list ypbind autofs openvpn gpm lircmd + before alsasound + + # Start before X + use acpid consolekit hald xfs +} + +setup_dm() { + local MY_XDM="$(echo "${DISPLAYMANAGER}" | tr '[:upper:]' '[:lower:]')" + + # Load our root path from profile.env + # Needed for kdm + PATH="${PATH}:$(. /etc/profile.env; echo "${ROOTPATH}")" + + case "${MY_XDM}" in + kdm|kde|kde2|kde3) + EXE="$(which kdm)" + # kdm takes too long to create a pidfile for baselayout-2 + #PIDFILE=/var/run/kdm.pid + PIDFILE= + ;; + kdm-*) + EXE="/usr/kde/${MY_XDM#kdm-}/bin/kdm" + PIDFILE= + ;; + entrance*) + EXE=/usr/sbin/entranced + PIDFILE=/var/lib/entranced.pid + ;; + gdm|gnome) + EXE=/usr/bin/gdm + [ "${RC_UNAME}" != "Linux" ] && NAME=gdm-binary + PIDFILE=/var/run/gdm.pid + ;; + wdm) + EXE=/usr/bin/wdm + PIDFILE= + ;; + gpe) + EXE=/usr/bin/gpe-dm + PIDFILE=/var/run/gpe-dm.pid + ;; + *) + 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 + + if ! [ -x "${EXE}" ] ; then + EXE=/usr/bin/xdm + PIDFILE=/var/run/xdm.pid + if ! [ -x "/usr/bin/xdm" ] ; then + echo "ERROR: Please set your DISPLAYMANAGER variable in /etc/conf.d/xdm," + echo " or install x11-apps/xdm package" + eend 255 + fi + fi +} + +cmdline_opt() { + if [ $# -ne 1 ] || ! [ -r /proc/cmdline ]; then + return 1 + fi + + for opt in $(cat /proc/cmdline) ; do + [ "${opt}" = "${1}" ] && return 0 + done + + return 1 +} + +# Check to see if something is defined on our VT +vtstatic() { + if [ -e /etc/inittab ] ; then + grep -Eq "^[^#]+.*\" /etc/inittab + elif [ -e /etc/ttys ] ; then + grep -q "^ttyv$(($1 - 1))" /etc/ttys + else + return 1 + fi +} + +start() { + local EXE= NAME= PIDFILE= + setup_dm + + if cmdline_opt nox ; then + einfo "Skipping ${EXE}, received 'nox'" + return 0 + fi + + ebegin "Setting up ${EXE##*/}" + #save the prefered DM + save_options "service" "${EXE}" + save_options "name" "${NAME}" + save_options "pidfile" "${PIDFILE}" + + if [ -n "${CHECKVT-y}" ] ; then + if vtstatic "${CHECKVT:-7}" ; then + if [ -x /sbin/telinit ] && [ "${SOFTLEVEL}" != "BOOT" ] && [ "${RC_SOFTLEVEL}" != "BOOT" ] ; then + ewarn "Something is already defined on VT ${CHECKVT:-7}, will start X later" + telinit a >/dev/null 2>/dev/null + return 0 + else + eerror "Something is already defined on VT ${CHECKVT:-7}, not starting" + return 1 + fi + fi + fi + + /etc/X11/startDM.sh + eend 0 +} + +stop() { + local retval=0 + local curvt= + if [ -t 0 ] ; then + if type fgconsole >/dev/null 2>/dev/null ; then + curvt="$(fgconsole 2>/dev/null)" + else + curvt="$(tty)" + case "${curvt}" in + /dev/ttyv[0-9]*) curvt="${curvt#/dev/ttyv*}" ;; + *) curvt= ;; + esac + fi + fi + local myexe="$(get_options "service")" + local myname="$(get_options "name")" + local mypidfile="$(get_options "pidfile")" + local myservice=${myexe##*/} + + [ -z "${myexe}" ] && return 0 + + ebegin "Stopping ${myservice}" + + if start-stop-daemon --quiet --test --stop --exec "${myexe}" ; then + start-stop-daemon --stop --exec "${myexe}" --retry TERM/5/TERM/5 \ + ${mypidfile:+--pidfile} ${mypidfile} \ + ${myname:+--name} ${myname} + retval=$? + fi + + # switch back to original vt + if [ -n "${curvt}" ] ; then + if type chvt >/dev/null 2>/dev/null ; then + chvt "${curvt}" + else + vidcontrol -s "$((${curvt} + 1))" + fi + fi + eend ${retval} "Error stopping ${myservice}" + + return ${retval} +} + +# vim: set ts=4 : diff --git a/x11-apps/xinit/files/xdm.initd-3 b/x11-apps/xinit/files/xdm.initd-3 new file mode 100755 index 000000000..46beb325e --- /dev/null +++ b/x11-apps/xinit/files/xdm.initd-3 @@ -0,0 +1,202 @@ +#!/sbin/runscript +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 +# $Header: /var/cvsroot/gentoo-x86/x11-apps/xinit/files/xdm.initd-3,v 1.2 2009/09/15 00:27:45 williamh Exp $ + +# This is here to serve as a note to myself, and future developers. +# +# Any Display manager (gdm,kdm,xdm) has the following problem: if +# it is started before any getty, and no vt is specified, it will +# usually run on vt2. When the getty on vt2 then starts, and the +# DM is already started, the getty will take control of the keyboard, +# leaving us with a "dead" keyboard. +# +# Resolution: add the following line to /etc/inittab +# +# x:a:once:/etc/X11/startDM.sh +# +# and have /etc/X11/startDM.sh start the DM in daemon mode if +# a lock is present (with the info of what DM should be started), +# else just fall through. +# +# How this basically works, is the "a" runlevel is a additional +# runlevel that you can use to fork processes with init, but the +# runlevel never gets changed to this runlevel. Along with the "a" +# runlevel, the "once" key word means that startDM.sh will only be +# run when we specify it to run, thus eliminating respawning +# startDM.sh when "xdm" is not added to the default runlevel, as was +# done previously. +# +# This script then just calls "telinit a", and init will run +# /etc/X11/startDM.sh after the current runlevel completes (this +# script should only be added to the actual runlevel the user is +# using). +# +# Martin Schlemmer +# aka Azarah +# 04 March 2002 + + +# Start X Font Server before X +depend() { + need localmount xdm-setup + + # this should start as early as possible + # we can't do 'before *' as that breaks it + # (#139824) Start after ypbind and autofs for network authentication + # (#145219 #180163) Could use lirc mouse as input device + # (#70689 comment #92) Start after consolefont to avoid display corruption + after bootmisc consolefont modules netmount + after readahead-list ypbind autofs openvpn gpm lircmd + before alsasound + + # Start before X + use acpid consolekit hald xfs +} + +setup_dm() { + local MY_XDM="$(echo "${DISPLAYMANAGER}" | tr '[:upper:]' '[:lower:]')" + + # Load our root path from profile.env + # Needed for kdm + PATH="${PATH}:$(. /etc/profile.env; echo "${ROOTPATH}")" + + case "${MY_XDM}" in + kdm|kde|kde2|kde3) + EXE="$(which kdm)" + # kdm takes too long to create a pidfile for baselayout-2 + #PIDFILE=/var/run/kdm.pid + PIDFILE= + ;; + kdm-*) + EXE="/usr/kde/${MY_XDM#kdm-}/bin/kdm" + PIDFILE= + ;; + entrance*) + EXE=/usr/sbin/entranced + PIDFILE=/var/lib/entranced.pid + ;; + gdm|gnome) + EXE=/usr/bin/gdm + [ "${RC_UNAME}" != "Linux" ] && NAME=gdm-binary + PIDFILE=/var/run/gdm.pid + ;; + wdm) + EXE=/usr/bin/wdm + PIDFILE= + ;; + gpe) + EXE=/usr/bin/gpe-dm + PIDFILE=/var/run/gpe-dm.pid + ;; + *) + 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 + + if ! [ -x "${EXE}" ] ; then + EXE=/usr/bin/xdm + PIDFILE=/var/run/xdm.pid + if ! [ -x "/usr/bin/xdm" ] ; then + echo "ERROR: Please set your DISPLAYMANAGER variable in /etc/conf.d/xdm," + echo " or install x11-apps/xdm package" + eend 255 + fi + fi +} + +# Check to see if something is defined on our VT +vtstatic() { + if [ -e /etc/inittab ] ; then + grep -Eq "^[^#]+.*\" /etc/inittab + elif [ -e /etc/ttys ] ; then + grep -q "^ttyv$(($1 - 1))" /etc/ttys + else + return 1 + fi +} + +start() { + local EXE= NAME= PIDFILE= + setup_dm + + if [ -f /etc/init.d/.noxdm ] ; then + einfo "Skipping ${EXE}, /etc/init.d/.noxdm found" + rm /etc/init.d/.noxdm + return 1 + fi + + ebegin "Setting up ${EXE##*/}" + #save the prefered DM + save_options "service" "${EXE}" + save_options "name" "${NAME}" + save_options "pidfile" "${PIDFILE}" + + if [ -n "${CHECKVT-y}" ] ; then + if vtstatic "${CHECKVT:-7}" ; then + if [ -x /sbin/telinit ] && [ "${SOFTLEVEL}" != "BOOT" ] && [ "${RC_SOFTLEVEL}" != "BOOT" ] ; then + ewarn "Something is already defined on VT ${CHECKVT:-7}, will start X later" + telinit a >/dev/null 2>/dev/null + return 0 + else + eerror "Something is already defined on VT ${CHECKVT:-7}, not starting" + return 1 + fi + fi + fi + + /etc/X11/startDM.sh + eend 0 +} + +stop() { + local retval=0 + local curvt= + if [ -t 0 ] ; then + if type fgconsole >/dev/null 2>/dev/null ; then + curvt="$(fgconsole 2>/dev/null)" + else + curvt="$(tty)" + case "${curvt}" in + /dev/ttyv[0-9]*) curvt="${curvt#/dev/ttyv*}" ;; + *) curvt= ;; + esac + fi + fi + local myexe="$(get_options "service")" + local myname="$(get_options "name")" + local mypidfile="$(get_options "pidfile")" + local myservice=${myexe##*/} + + [ -z "${myexe}" ] && return 0 + + ebegin "Stopping ${myservice}" + + if start-stop-daemon --quiet --test --stop --exec "${myexe}" ; then + start-stop-daemon --stop --exec "${myexe}" --retry TERM/5/TERM/5 \ + ${mypidfile:+--pidfile} ${mypidfile} \ + ${myname:+--name} ${myname} + retval=$? + fi + + # switch back to original vt + if [ -n "${curvt}" ] ; then + if type chvt >/dev/null 2>/dev/null ; then + chvt "${curvt}" + else + vidcontrol -s "$((${curvt} + 1))" + fi + fi + eend ${retval} "Error stopping ${myservice}" + + return ${retval} +} + +# vim: set ts=4 : diff --git a/x11-apps/xinit/files/xdm.start b/x11-apps/xinit/files/xdm.start new file mode 100755 index 000000000..baf325c70 --- /dev/null +++ b/x11-apps/xinit/files/xdm.start @@ -0,0 +1,164 @@ +#!/sbin/runscript +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 +# $Header: /var/cvsroot/gentoo-x86/x11-apps/xinit/files/xdm.start,v 1.11 2006/11/22 20:08:45 dberkholz Exp $ + +# This is here to serve as a note to myself, and future developers. +# +# Any Display manager (gdm,kdm,xdm) has the following problem: if +# it is started before any getty, and no vt is specified, it will +# usually run on vt2. When the getty on vt2 then starts, and the +# DM is already started, the getty will take control of the keyboard, +# leaving us with a "dead" keyboard. +# +# Resolution: add the following line to /etc/inittab +# +# x:a:once:/etc/X11/startDM.sh +# +# and have /etc/X11/startDM.sh start the DM in daemon mode if +# a lock is present (with the info of what DM should be started), +# else just fall through. +# +# How this basically works, is the "a" runlevel is a additional +# runlevel that you can use to fork processes with init, but the +# runlevel never gets changed to this runlevel. Along with the "a" +# runlevel, the "once" key word means that startDM.sh will only be +# run when we specify it to run, thus eliminating respawning +# startDM.sh when "xdm" is not added to the default runlevel, as was +# done previously. +# +# This script then just calls "telinit a", and init will run +# /etc/X11/startDM.sh after the current runlevel completes (this +# script should only be added to the actual runlevel the user is +# using). +# +# Martin Schlemmer +# aka Azarah +# 04 March 2002 + + +# Start X Font Server before X +depend() { + need localmount + + # this should start as early as possible + # we can't do 'before *' as that breaks it + # (#139824) Start after ypbind and autofs for network authentication + # (#145219) Could use lirc mouse as input device + # (#70689 comment #92) Start after consolefont to avoid display corruption + after bootmisc readahead-list ypbind autofs openvpn gpm netmount lircd consolefont + before alsasound net.lo + + # Start before X + use acpid hald xfs +} + +setup_dm() { + source /etc/profile.env + export PATH="/bin:/sbin:/usr/bin:/usr/sbin:${ROOTPATH}" + + local MY_XDM="$(echo ${DISPLAYMANAGER} | awk '{ print tolower($1) }')" + case "${MY_XDM}" in + kdm|kde|kde2|kde3) + EXE="$(which kdm)" + ;; + entrance*) + EXE="$(which entranced)" + ;; + gdm|gnome) + EXE=/usr/bin/gdm + ;; + wdm) + EXE=/usr/bin/wdm + ;; + *) + EXE= + # Fix #65586, where MY_XDM is empty so EXE=somedir + [ -x "/usr/bin/${MY_XDM}" -a -f "/usr/bin/${MY_XDM}" ] \ + && EXE="/usr/bin/${MY_XDM}" + [ -z "${EXE}" ] && EXE="/usr/bin/xdm" + ;; + esac + + test ! -x "${EXE}" && EXE=/usr/bin/xdm + + SERVICE="${EXE##*/}" +} + +cmdline_opt() { + if [[ "$#" -ne 1 ]]; then + return 1 + fi + + for opt in $(/dev/null + fi + eend 0 + fi + +} + +stop() { + local retval=0 + local curvt="$(fgconsole)" + local myexe="$(get_options "service")" + local myservice="${myexe##*/}" + + ebegin "Stopping ${myservice}" + rm -f ${svcdir}/options/xdm/service + + if [ "$(ps -A | grep -e "${myservice}")" ] + then + start-stop-daemon --stop --quiet \ + --exec ${myexe} &>/dev/null + + retval=$? + fi + + #switch back to original vt + chvt "${curvt}" &>/dev/null + eend ${retval} "Error stopping ${myservice}." + + return ${retval} +} + + +# vim:ts=4 diff --git a/x11-apps/xinit/files/xinit-1.0.4-console-kit.patch b/x11-apps/xinit/files/xinit-1.0.4-console-kit.patch new file mode 100644 index 000000000..645e4e532 --- /dev/null +++ b/x11-apps/xinit/files/xinit-1.0.4-console-kit.patch @@ -0,0 +1,197 @@ +diff --git a/Makefile.am b/Makefile.am +index babc2f3..9b912a3 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -24,8 +24,8 @@ XINITDIR = $(libdir)/X11/xinit + bin_PROGRAMS = xinit + bin_SCRIPTS = startx + +-xinit_CFLAGS = $(XINIT_CFLAGS) -DXINITDIR=\"$(XINITDIR)\" -DBINDIR=\"$(bindir)\" +-xinit_LDADD = $(XINIT_LIBS) ++xinit_CFLAGS = $(XINIT_CFLAGS) $(CK_CFLAGS) -DXINITDIR=\"$(XINITDIR)\" -DBINDIR=\"$(bindir)\" ++xinit_LDADD = $(XINIT_LIBS) $(CK_LIBS) + + xinit_SOURCES = \ + xinit.c +diff --git a/configure.ac b/configure.ac +index 1aee1d2..5775db3 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -47,6 +47,7 @@ DEFAULT_XMODMAP=xmodmap + DEFAULT_TWM=twm + DEFAULT_XCLOCK=xclock + DEFAULT_XTERM=xterm ++DEFAULT_CK=yes + # You always want to specify the full path to the X server + DEFAULT_XSERVER=${bindir}/X + DEFAULT_XAUTH=xauth +@@ -104,6 +105,20 @@ esac + AC_SUBST(XINIT_CFLAGS) + AC_SUBST(XINIT_LIBS) + ++# Check for ConsoleKit ++AC_ARG_WITH(consolekit, ++ AS_HELP_STRING([--with-consolekit], [Use ConsoleKit in xinit]), ++ [CK="$withval"], ++ [CK="$DEFAULT_CK"]) ++if test "x$CK" != xno ; then ++ PKG_CHECK_MODULES(CK, ck-connector, ++ have_conkit=yes, ++ [have_conkit=no; echo no]) ++ if test "x$have_conkit" = xyes ; then ++ AC_DEFINE(USE_CONKIT, 1, [Define if you have ConsoleKit]) ++ fi ++fi ++ + AC_PATH_PROGS(MCOOKIE, [mcookie], [$MCOOKIE], + [$PATH:/bin:/usr/bin:/usr/lib:/usr/libexec:/usr/local/bin]) + if test "x$MCOOKIE" != x ; then +diff --git a/startx.cpp b/startx.cpp +index 42421ef..998c7f8 100644 +--- a/startx.cpp ++++ b/startx.cpp +@@ -222,6 +222,12 @@ EOF + fi + done + ++if [ x"$display" != x ]; then ++ export DISPLAY=$display ++else ++ export DISPLAY=:0 ++fi ++ + #if defined(__SCO__) || defined(__UNIXWARE__) + if [ "$REMOTE_SERVER" = "TRUE" ]; then + exec SHELL_CMD ${client} +diff --git a/xinit.c b/xinit.c +index 46dee54..c2c4527 100644 +--- a/xinit.c ++++ b/xinit.c +@@ -39,6 +39,12 @@ in this Software without prior written authorization from The Open Group. + #include + #include + ++#ifdef USE_CONKIT ++#include ++#include ++static CkConnector *ckc = NULL; ++#endif /* USE_CONKIT */ ++ + #ifdef X_POSIX_C_SOURCE + #define _POSIX_C_SOURCE X_POSIX_C_SOURCE + #include +@@ -521,6 +527,39 @@ processTimeout(int timeout, char *string) + return( serverpid != pidfound ); + } + ++ ++#ifdef USE_CONKIT ++static void ++register_new_session_with_console_kit (void) ++{ ++ static char conkitbuf[256]; ++ DBusError error; ++ ++ ckc = ck_connector_new (); ++ if (ckc == NULL) { ++ Error ("Cannot register with ConsoleKit: OOM creating CkConnector\n"); ++ goto out; ++ } ++ ++ dbus_error_init (&error); ++ if (!ck_connector_open_session (ckc, &error)) { ++ Error ("Cannot register with ConsoleKit: %s: %s\n", error.name, error.message); ++ goto out; ++ } ++ ++ /* If we managed to register with ConsoleKit, put the ++ * environment variable XDG_SESSION_COOKIE=cookie as second ++ * element in newenviron. See set_environment() where we ++ * earlier have made sure there is room... ++ */ ++ conkitbuf[sizeof (conkitbuf) - 1] = '\0'; ++ snprintf (conkitbuf, sizeof (conkitbuf) - 1, "XDG_SESSION_COOKIE=%s", ck_connector_get_cookie (ckc)); ++ newenviron[1] = conkitbuf; ++out: ++ ; ++} ++#endif /* USE_CONKIT */ ++ + static int + startServer(char *server[]) + { +@@ -631,6 +670,12 @@ startServer(char *server[]) + break; + } + ++#ifdef USE_CONKIT ++ if (serverpid != -1 ) { ++ register_new_session_with_console_kit (); ++ } ++#endif /* USE_CONKIT */ ++ + return(serverpid); + } + +@@ -775,6 +820,13 @@ shutdown(void) + clientpid); + } + ++#ifdef USE_CONKIT ++ if (ckc != NULL) { ++ ck_connector_unref (ckc); ++ ckc = NULL; ++ } ++#endif ++ + if (serverpid < 0) + return; + errno = 0; +@@ -811,6 +863,13 @@ shutdown(void) + * make a new copy of environment that has room for DISPLAY + */ + ++ ++#ifdef USE_CONKIT ++#define NUM_EXTRA_ENV_VARS 4 ++#else ++#define NUM_EXTRA_ENV_VARS 3 ++#endif ++ + static void + set_environment(void) + { +@@ -822,11 +881,11 @@ set_environment(void) + for (oldPtr = environ; *oldPtr; oldPtr++) ; + + nenvvars = (oldPtr - environ); +- newenviron = (char **) malloc ((nenvvars + 3) * sizeof(char **)); ++ newenviron = (char **) malloc ((nenvvars + NUM_EXTRA_ENV_VARS) * sizeof(char **)); + if (!newenviron) { + fprintf (stderr, + "%s: unable to allocate %d pointers for environment\n", +- program, nenvvars + 3); ++ program, nenvvars + NUM_EXTRA_ENV_VARS); + exit (1); + } + +@@ -836,10 +895,18 @@ set_environment(void) + newPtr = newenviron; + *newPtr++ = displaybuf; + ++#ifdef USE_CONKIT ++ *newPtr++ = "XDG_SESSION_COOKIE="; ++#endif ++ + /* copy pointers to other variables */ + for (oldPtr = environ; *oldPtr; oldPtr++) { + if (strncmp (*oldPtr, "DISPLAY=", 8) != 0 +- && strncmp (*oldPtr, "WINDOWPATH=", 11) != 0) { ++ && strncmp (*oldPtr, "WINDOWPATH=", 11) != 0 ++#ifdef USE_CONKIT ++ && strncmp (*oldPtr, "XDG_SESSION_COOKIE=", 19) != 0 ++#endif ++ ) { + *newPtr++ = *oldPtr; + } + } diff --git a/x11-apps/xinit/files/xinitrc b/x11-apps/xinit/files/xinitrc new file mode 100644 index 000000000..6072d116d --- /dev/null +++ b/x11-apps/xinit/files/xinitrc @@ -0,0 +1,50 @@ +#!/bin/sh +# $Xorg: xinitrc.cpp,v 1.3 2000/08/17 19:54:30 cpqbld Exp $ + +userresources=$HOME/.Xresources +usermodmap=$HOME/.Xmodmap +xinitdir=/etc/X11 +sysresources=$xinitdir/Xresources +sysmodmap=$xinitdir/Xmodmap + +# merge in defaults and keymaps + +if [ -f $sysresources ]; then + xrdb -merge $sysresources +fi + +if [ -f $sysmodmap ]; then + xmodmap $sysmodmap +fi + +if [ -f $userresources ]; then + xrdb -merge $userresources +fi + +if [ -f $usermodmap ]; then + xmodmap $usermodmap +fi + +# First try ~/.xinitrc +if [ -f "$HOME/.xinitrc" ]; then + XINITRC="$HOME/.xinitrc" + if [ -x $XINITRC ]; then + # if the x bit is set on .xinitrc + # it means the xinitrc is not a + # shell script but something else + exec $XINITRC + else + exec /bin/sh "$HOME/.xinitrc" + fi +# If not present, try the system default +elif [ -n "`/etc/X11/chooser.sh`" ]; then + exec "`/etc/X11/chooser.sh`" +# Failsafe +else + # start some nice programs + twm & + xclock -geometry 50x50-1+1 & + xterm -geometry 80x50+494+51 & + xterm -geometry 80x20+494-0 & + exec xterm -geometry 80x66+0+0 -name login +fi diff --git a/x11-apps/xinit/files/xserver.pamd b/x11-apps/xinit/files/xserver.pamd new file mode 100644 index 000000000..b093f86a7 --- /dev/null +++ b/x11-apps/xinit/files/xserver.pamd @@ -0,0 +1,5 @@ +#%PAM-1.0 +auth sufficient pam_rootok.so +auth required pam_permit.so + +account required pam_permit.so diff --git a/x11-apps/xinit/files/xsession.env.d b/x11-apps/xinit/files/xsession.env.d new file mode 100644 index 000000000..c108d3d44 --- /dev/null +++ b/x11-apps/xinit/files/xsession.env.d @@ -0,0 +1,25 @@ +# /etc/env.d/90xsession + +# XSESSION is a new variable to control what window manager to start +# default with X if run with xdm, startx or xinit. The default behavior +# is to look in /etc/X11/Sessions/ and run the script in matching the +# value that XSESSION is set to. The support scripts are smart enough to +# look in all bin directories if it cant find a match in /etc/X11/Sessions/, +# so setting it to "enlightenment" can also work. This is basically used +# as a way for the system admin to configure a default system wide WM, +# allthough it will work if the user export XSESSION in his .bash_profile, etc. +# +# NOTE: 1) this behaviour is overridden when a ~/.xinitrc exists, and startx +# is called. +# 2) even if ~/.xsession exists, if XSESSION can be resolved, it will +# be executed rather than ~/.xsession, else KDM breaks ... +# +# Defaults depending on what you install currently include: +# +# Gnome - will start gnome-session +# kde- - will start startkde (look in /etc/X11/Sessions/) +# Xfce4 - will start a XFCE4 session +# Xsession - will start a terminal and a few other nice apps + +#XSESSION="Gnome" + diff --git a/x11-apps/xinit/xinit-1.0.8-r7.ebuild b/x11-apps/xinit/xinit-1.0.8-r7.ebuild new file mode 100644 index 000000000..ba5bf8617 --- /dev/null +++ b/x11-apps/xinit/xinit-1.0.8-r7.ebuild @@ -0,0 +1,73 @@ +# Copyright 1999-2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/x11-apps/xinit/xinit-1.0.8-r7.ebuild,v 1.1 2009/09/17 16:30:22 williamh Exp $ + +EAPI="2" + +# Must be before x-modular eclass is inherited +# This is enabled due to modified Makefile.am from the patches +SNAPSHOT="yes" + +inherit x-modular pam + +DESCRIPTION="X Window System initializer" + +LICENSE="${LICENSE} GPL-2" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~x86-fbsd" +IUSE="hal minimal pam" + +RDEPEND="x11-apps/xauth + x11-libs/libX11 + hal? ( sys-auth/consolekit sys-apps/dbus[X] )" +DEPEND="${RDEPEND}" +PDEPEND="!minimal? ( x11-wm/twm + x11-apps/xclock + x11-apps/xrdb + x11-apps/xsm + x11-terms/xterm )" + +PATCHES=( "${FILESDIR}"/nolisten-tcp-and-black-background.patch + "${FILESDIR}"/gentoo-startx-customization-1.0.8.patch + "${FILESDIR}"/xinit-1.0.4-console-kit.patch ) + +pkg_setup() { + CONFIGURE_OPTIONS="$(use_with hal consolekit)" +} + +src_prepare() { + x-modular_patch_source + + sed -i -e "s:^XINITDIR.*:XINITDIR = \$(sysconfdir)/X11/xinit:g" "${S}/Makefile.am" + + x-modular_reconf_source +} + +src_install() { + x-modular_src_install + exeinto /etc/X11 + doexe "${FILESDIR}"/chooser.sh "${FILESDIR}"/startDM.sh || die + exeinto /etc/X11/Sessions + doexe "${FILESDIR}"/Xsession || die + exeinto /etc/X11/xinit + doexe "${FILESDIR}"/xinitrc || die + newinitd "${FILESDIR}"/xdm.initd-3 xdm + newinitd "${FILESDIR}"/xdm-setup.initd-1 xdm-setup + newconfd "${FILESDIR}"/xdm.confd-1 xdm + newpamd "${FILESDIR}"/xserver.pamd xserver + + dodir /etc/X11/xinit/xinitrc.d + exeinto /etc/X11/xinit/xinitrc.d/ + doexe "${FILESDIR}/00-xhost" +} + +pkg_postinst() { + x-modular_pkg_postinst + ewarn "If you use startx to start X instead of a login manager like gdm/kdm," + ewarn "you can set the XSESSION variable to anything in /etc/X11/Sessions/ or" + ewarn "any executable. When you run startx, it will run this as the login session." + ewarn "You can set this in a file in /etc/env.d/ for the entire system," + ewarn "or set it per-user in ~/.bash_profile (or similar for other shells)." + ewarn "Here's an example of setting it for the whole system:" + ewarn " echo XSESSION=\"Gnome\" > /etc/env.d/90xsession" + ewarn " env-update && source /etc/profile" +}