Bug#738497: gdm3: XDMCP cannot handle multiple terminals
Paul Szabo
paul.szabo at sydney.edu.au
Mon Feb 10 00:08:03 UTC 2014
Package: gdm3
Version: 3.4.1-8
Severity: normal
I find that gdm3 XDMCP cannot handle multiple terminals.
I have some labs with about 100 terminals, all should be
showing an XDMCP login screen.
Initial problem was with D-Bus, log lines like
Feb 4 11:53:21 bari gdm-welcome][15095]: AccountsService-WARNING: Failed to connect to the D-Bus daemon: GDBus.Error:org.freedesktop.DBus.Error.LimitsExceeded: The maximum number of active connections for UID 0 has been reached
Seems /etc/dbus-1/session.conf settings are not applied.
A workaround seems to be to set "limit" lines in
/etc/dbus-1/system.conf also. After D-Bus is "working"...
Starting XDMCP login screens (greeters) one at a time,
starting about 5 or 10, the next one starting causes all
previous ones quit, even the console ":0" greeter would
quit. This was with just the greeter login screens showing,
I am not sure whether logged-in sessions would quit also.
As a workaround, I will use squeeze GDM2 instead.
Cheers, Paul
Paul Szabo psz at maths.usyd.edu.au http://www.maths.usyd.edu.au/u/psz/
School of Mathematics and Statistics University of Sydney Australia
-- System Information:
Debian Release: 7.4
APT prefers stable
APT policy: (500, 'stable')
Architecture: i386 (x86_64)
Kernel: Linux 3.2.51-pk06.21-amd64 (SMP w/8 CPU cores)
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/bash
Versions of packages gdm3 depends on:
ii accountsservice 0.6.21-8
ii adduser 3.113+nmu3
ii dconf-gsettings-backend 0.12.1-3
ii dconf-tools 0.12.1-3
ii debconf [debconf-2.0] 1.5.49
ii dpkg 1.16.12
ii fluxbox [x-window-manager] 1.3.2-4
ii gir1.2-freedesktop 1.32.1-1
ii gir1.2-glib-2.0 1.32.1-1
ii gnome-session [x-session-manager] 3.4.2.1-4
ii gnome-session-bin 3.4.2.1-4
ii gnome-session-fallback [x-session-manage 3.4.2.1-4
ii gnome-settings-daemon 3.4.2+git20121218.7c1322-3+deb7u3
ii gnome-terminal [x-terminal-emulator] 3.4.1.1-2
ii gsettings-desktop-schemas 3.4.2-3
ii icewm [x-window-manager] 1.3.7-4
ii konsole [x-terminal-emulator] 4:4.8.4-2
ii libaccountsservice0 0.6.21-8
ii libatk1.0-0 2.4.0-2
ii libattr1 1:2.4.46-8
ii libaudit0 1:1.7.18-1.1
ii libc6 2.13-38+deb7u1
ii libcairo-gobject2 1.12.2-3
ii libcairo2 1.12.2-3
ii libcanberra-gtk3-0 0.28-6
ii libcanberra0 0.28-6
ii libdbus-1-3 1.6.8-1+deb7u1
ii libdbus-glib-1-2 0.100.2-1
ii libfontconfig1 2.9.0-7.1
ii libgdk-pixbuf2.0-0 2.26.1-1
ii libglib2.0-0 2.33.12+really2.32.4-5
ii libglib2.0-bin 2.33.12+really2.32.4-5
ii libgtk-3-0 3.4.2-7
ii libpam-modules 1.1.3-7.1
ii libpam-runtime 1.1.3-7.1
ii libpam0g 1.1.3-7.1
ii libpango1.0-0 1.30.0-1
ii librsvg2-common 2.36.1-2
ii libselinux1 2.1.9-5
ii libupower-glib1 0.9.17-1
ii libwrap0 7.6.q-24
ii libx11-6 2:1.5.0-1+deb7u1
ii libxau6 1:1.0.7-1
ii libxdmcp6 1:1.1.1-1
ii libxklavier16 5.2.1-1
ii libxrandr2 2:1.3.2-2+deb7u1
ii lsb-base 4.1+Debian8+deb7u1
ii metacity [x-window-manager] 1:2.34.3-4
ii policykit-1-gnome 0.105-2
ii rxvt [x-terminal-emulator] 1:2.6.4-14
ii sawfish [x-window-manager] 1:1.5.3-2.1+b1
ii upower 0.9.17-1
ii x11-common 1:7.7+3~deb7u1
ii x11-xserver-utils 7.7~3
ii xfce4-session [x-session-manager] 4.8.3-3
ii xfce4-terminal [x-terminal-emulator] 0.4.8-1+b1
ii xfwm4 [x-window-manager] 4.8.3-2
ii xterm [x-terminal-emulator] 278-4
ii xvt [x-terminal-emulator] 2.1-20.1
Versions of packages gdm3 recommends:
pn at-spi2-core <none>
ii desktop-base 7.0.3
ii gnome-icon-theme 3.4.0-2
ii gnome-icon-theme-symbolic 3.4.0-2
ii x11-xkb-utils 7.7~1
pn xserver-xephyr <none>
ii xserver-xorg 1:7.7+3~deb7u1
ii zenity 3.4.0-2
Versions of packages gdm3 suggests:
pn gnome-orca <none>
ii gnome-shell 3.4.2-7+deb7u1
pn gok <none>
ii libpam-gnome-keyring 3.4.1-5
-- Configuration Files:
/etc/gdm3/Init/Default changed:
PATH=/usr/sms/bin:/usr/local/bin:/usr/bin:/bin
OLD_IFS=$IFS
gdmwhich () {
COMMAND="$1"
OUTPUT=
IFS=:
for dir in $PATH
do
if test -x "$dir/$COMMAND" ; then
if test "x$OUTPUT" = "x" ; then
OUTPUT="$dir/$COMMAND"
fi
fi
done
IFS=$OLD_IFS
echo "$OUTPUT"
}
sysmodmap=/etc/X11/Xmodmap
XMODMAP=`gdmwhich xmodmap`
if [ "x$XMODMAP" != "x" ] ; then
if [ "x$GDM_PARENT_DISPLAY" = "x" ]; then
if [ -f $sysmodmap ]; then
$XMODMAP $sysmodmap
fi
else
( DISPLAY=$GDM_PARENT_DISPLAY XAUTHORITY=$GDM_PARENT_XAUTHORITY $XMODMAP -pke ) | $XMODMAP -
fi
#
# Switch Sun's Alt and Meta mod mappings
#
UNAME=`gdmwhich uname`
PROCESSOR=`$UNAME -p`
if [ "x$PROCESSOR" = "xsparc" ]; then
if $XMODMAP | grep mod4 | grep Alt > /dev/null 2>/dev/null
then
$XMODMAP -e "clear Mod1" \
-e "clear Mod4" \
-e "add Mod1 = Alt_L" \
-e "add Mod1 = Alt_R" \
-e "add Mod4 = Meta_L" \
-e "add Mod4 = Meta_R"
fi
fi
fi
SETXKBMAP=`gdmwhich setxkbmap`
if [ "x$SETXKBMAP" != "x" ] ; then
# FIXME: is this all right? Is this completely on crack?
# What this does is move the xkb configuration from the GDM_PARENT_DISPLAY
# FIXME: This should be done in code. Or there must be an easier way ...
if [ -n "$GDM_PARENT_DISPLAY" ]; then
XKBSETUP=`( DISPLAY=$GDM_PARENT_DISPLAY XAUTHORITY=$GDM_PARENT_XAUTHORITY $SETXKBMAP -v )`
if [ -n "$XKBSETUP" ]; then
XKBKEYMAP=`echo "$XKBSETUP" | grep '^keymap' | awk '{ print $2 }'`
XKBTYPES=`echo "$XKBSETUP" | grep '^types' | awk '{ print $2 }'`
XKBCOMPAT=`echo "$XKBSETUP" | grep '^compat' | awk '{ print $2 }'`
XKBSYMBOLS=`echo "$XKBSETUP" | grep '^symbols' | awk '{ print $2 }'`
XKBGEOMETRY=`echo "$XKBSETUP" | grep '^geometry' | awk '{ print $2 }'`
if [ -n "$XKBKEYMAP" ]; then
$SETXKBMAP -keymap "$XKBKEYMAP"
elif [ -n "$XKBTYPES" -a -n "$XKBCOMPAT" -a -n "$XKBSYMBOLS" -a -n "$XKBGEOMETRY" ]; then
$SETXKBMAP -types "$XKBTYPES" -compat "$XKBCOMPAT" -symbols "$XKBSYMBOLS" -geometry "$XKBGEOMETRY"
elif [ -n "$XKBTYPES" -a -n "$XKBCOMPAT" -a -n "$XKBSYMBOLS" ]; then
$SETXKBMAP -types "$XKBTYPES" -compat "$XKBCOMPAT" -symbols "$XKBSYMBOLS"
elif [ -n "$XKBSYMBOLS" ]; then
$SETXKBMAP -symbols "$XKBSYMBOLS"
fi
fi
fi
fi
exit 0
/etc/gdm3/PreSession/Default changed:
/etc/gdm3/Xsession changed:
PROGNAME=Xsession
message () {
# pretty-print messages of arbitrary length; use xmessage if it
# is available and $DISPLAY is set
MESSAGE="$PROGNAME: $*"
echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2
if [ -n "$DISPLAY" ]; then
if [ -n "$zenity" ]; then
"$zenity" --info --text "$MESSAGE"
elif [ -n "$xmessage" ]; then
echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} | $xmessage -center -file -
fi
fi
}
message_nonl () {
# pretty-print messages of arbitrary length (no trailing newline); use
# xmessage if it is available and $DISPLAY is set
MESSAGE="$PROGNAME: $*"
echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2;
if [ -n "$DISPLAY" ]; then
if [ -n "$zenity" ]; then
"$zenity" --info --text "$MESSAGE"
elif [ -n "$xmessage" ]; then
echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} | $xmessage -center -file -
fi
fi
}
errormsg () {
# exit script with error
message "$*"
exit 1
}
internal_errormsg () {
# exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message
# One big call to message() for the sake of xmessage; if we had two then
# the user would have dismissed the error we want reported before seeing the
# request to report it.
errormsg "$*" \
"Please report the installed version of the \"xfree86-common\"" \
"package and the complete text of this error message to" \
"<debian-x at lists.debian.org>."
}
run_parts () {
# until run-parts --noexec is implemented
if [ -z "$1" ]; then
internal_errormsg "run_parts() called without an argument."
fi
if [ ! -d "$1" ]; then
internal_errormsg "run_parts() called, but \"$1\" does not exist or is" \
"not a directory."
fi
for F in $(/bin/ls $1); do
if expr "$F" : '[[:alnum:]_-]\+$' > /dev/null 2>&1; then
if [ -f "$1/$F" ]; then
echo "$1/$F"
fi
fi
done
}
OPTIONFILE=/etc/X11/Xsession.options
SYSRESOURCES=/etc/X11/Xresources
USRRESOURCES=$HOME/.Xresources
SYSSESSIONDIR=/etc/X11/Xsession.d
USERXSESSION=$HOME/.xsession
USERXSESSIONRC=$HOME/.xsessionrc
ALTUSERXSESSION=$HOME/.Xsession
echo "$0: Beginning session setup for $*"
test -f /etc/profile && . /etc/profile
test -f "$HOME/.profile" && . "$HOME/.profile"
test -f /etc/xprofile && . /etc/xprofile
test -f "$HOME/.xprofile" && . "$HOME/.xprofile"
zenity=`which zenity 2>/dev/null`
xmessage=`which xmessage 2>/dev/null`
command="$1"
if [ -z "$command" ] ; then
command=failsafe
fi
if [ x"$command" = xfailsafe ] ; then
if [ -n "$zenity" ] ; then
"$zenity" --info --text "This is the failsafe xterm session. Windows now have focus only if you have your cursor above them. To get out of this mode type 'exit' in the window in the upper left corner"
else
echo "$0: Starting the failsafe xterm session."
fi
exec xterm -geometry 80x24+0+0
fi
freetemp=`which freetemp 2>/dev/null`
if [ -n "$freetemp" ] ; then
"$freetemp"
fi
usermodmap="$HOME/.Xmodmap"
userxkbmap="$HOME/.Xkbmap"
if [ -f "$userxkbmap" ]; then
setxkbmap `cat "$userxkbmap"`
XKB_IN_USE=yes
fi
if [ -z "$XKB_IN_USE" ]; then
if [ -f "$usermodmap" ]; then
xmodmap "$usermodmap"
fi
fi
unset XKB_IN_USE
if [ -n "$GDM_LANG" ]; then
# Set the locale to that, it's the language selected in GDM.
LANG="$GDM_LANG"
export LANG
if [ -n "$LC_ALL" ] && [ "$LC_ALL" != "$LANG" ]; then
LC_ALL="$LANG"
fi
# if GDM_LANG isn't first in LANGUAGE, then unset it.
if [ -n "$LANGUAGE" ]; then
if echo "$LANGUAGE" | grep -q -- "^$GDM_LANG"; then
:
else
unset LANGUAGE
fi
fi
fi
xauth list 2>/dev/null | perl -ne '
($h,$s,$m,$c)=m/^#ffff#((?:3\d|2e)*)#:(\S+)\s+(MIT\S+)\s+([0-9a-f]{32})$/ and
$h=~s/2e/./g and $h=~s/3(\d)/$1/g and
system "xauth add $h:$s $m $c";
exit'
if [ "x$command" = "xcustom" ] ; then
shift
set -- default "$@"
fi
case "$1" in
'' )
# Should not ever happen, see failsafe above
;;
default )
# User chose "system default" session, which is default.
# See if user has something more sensible in ~/.dmrc already.
# I like perl, could use sed or "shell functions", instead.
# Noting: system default is gnome-session which tries gnome3,
# but that does not work and elicits a message. We use
# "gnome classic" gnome-session-fallback as default, instead.
# Reminder: we need Alt-rightclick (not just rightclick) to
# arrange menus (panel items) in wheezy gnome.
dmrcdefault='gnome-session-fallback'
if [ -f $HOME/.dmrc ]; then
dmrc=$(perl -ne 's/^\s*Session\s*=\s*(\/?\w[\w\/-]+)\s*$/$1/ and print,exit' $HOME/.dmrc)
if [ -n "$dmrc" ]; then
case "$dmrc" in
gnome )
# Was "gnome" at squeeze gdm, it is "gome-session" at wheezy gdm3;
# but as commented above, using our default instead.
echo "$0: ~/.dmrc has Session=gnome but using $dmrcdefault instead"
dmrc="$dmrcdefault"
;;
esac
echo "$0: Using Session=$dmrc from ~/.dmrc instead of $1"
shift
set -- "$dmrc" "$@"
else
echo "$0: No Session=... line in ~/.dmrc so keep using $1"
fi
else
#echo "$0: No file ~/.dmrc so keep using $1"
echo "$0: No file ~/.dmrc so using $dmrcdefault instead of $1"
dmrc="$dmrcdefault"
shift
set -- "$dmrc" "$@"
fi
;;
* )
# Got some (non-trivial?) session selection, record it in ~/.dmrc
# in standard format
echo -e "[Desktop]\nSession=$1" > $HOME/.dmrc
echo "$0: Recorded Session=$1 in ~/.dmrc"
;;
esac
SESSIONFILES=$(run_parts $SYSSESSIONDIR)
if [ -n "$SESSIONFILES" ]; then
for SESSIONFILE in $SESSIONFILES; do
. $SESSIONFILE
done
fi
echo "$0: Executing $command failed, will try to run x-terminal-emulator"
if [ -n "$zenity" ] ; then
"$zenity" --info --text "I could not start your session and so I have started the failsafe xterm session. Windows now have focus only if you have your cursor above them. To get out of this mode type 'exit' in the window in the upper left corner"
fi
exec x-terminal-emulator -geometry 80x24+0+0
/etc/gdm3/daemon.conf changed:
[daemon]
[security]
DisallowTCP=false
[xdmcp]
Enable=true
HonorIndirect=true
MaxPending=4
MaxPendingIndirect=128
MaxSessions=128
MaxWait=30
MaxWaitIndirect=30
DisplaysPerHost=1
Port=177
[greeter]
[chooser]
[debug]
/etc/gdm3/greeter.gsettings changed:
[org.gnome.desktop.background]
picture-uri='file:///usr/share/images/desktop-base/moreblue-orbit-wallpaper-widescreen.svg'
picture-options='zoom'
[org.gnome.login-screen]
logo='/usr/share/icons/gnome/48x48/places/debian-swirl.png'
fallback-logo='/usr/share/icons/gnome/48x48/places/debian-swirl.png'
disable-user-list=true
[org.gnome.desktop.sound]
event-sounds=false
[org.gnome.metacity]
compositing-manager=false
/etc/pam.d/gdm3 changed:
auth requisite pam_nologin.so
@include common-auth
auth optional pam_gnome_keyring.so
@include common-account
session required pam_limits.so
session required pam_env.so readenv=1
session required pam_env.so readenv=1 envfile=/etc/default/locale
session required pam_loginuid.so
@include common-session
session optional pam_gnome_keyring.so auto_start
@include common-password
-- debconf information:
* shared/default-x-display-manager: gdm3
gdm3/daemon_name: /usr/sbin/gdm3
More information about the pkg-gnome-maintainers
mailing list