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