Current File : //etc/vmware-tools/xsession-xdm.pl
#!/usr/bin/perl -w
#
# Copyright (c) 2007-2017 VMware, Inc.  All rights reserved.
#

use strict;

#
# xsession-xdm.pl --
#   Massage xrdb(1) output of xdm-config to help determine the location of
#   the user's Xsession script.
#
# First extract the display number from the user's DISPLAY environment
# variable.  Then examine input looking for either of the following:
#   1.  Xsession script specific to this display.
#   2.  Wildcard Xsession resource (applies to all displays).
#
# If a display-specific resource was found, print its value.  Otherwise,
# if a generic resource was found, print its value.  If neither was found,
# there is no output.
#

my $sessionSpecific;    # Path to display-specific Xsession script.
my $sessionDefault;     # Path to default Xsession script.

my $display;    # Refers to user's display number.
my $spattern;   # Pattern generated at run-time (based on $display) to match
                # a display-specific DisplayManager*session line.

# The generic/default pattern.
my $gpattern = '^[^!]*DisplayManager\.?\*\.?session';

if (defined($ENV{'DISPLAY'}) && $ENV{'DISPLAY'} =~ /:([0-9]+)/) {
   # Based on the well-formed $DISPLAY, build our display-specific session
   # pattern thingy.
   $display = $1;
   $spattern = sprintf("^[^!]*DisplayManager._%d.session", $display);

   # Okay, patterns have been built.  Let's get our search on.
   while (<STDIN>) {
      chomp($_);

      if ($_ =~ /$spattern:\s*(.*)/) {
         $sessionSpecific = $1;
      } elsif ($_ =~ /$gpattern:\s*(.*)/) {
         $sessionDefault = $1;
      }
   }

   if ($sessionSpecific) {
      print "$sessionSpecific\n";
   } elsif ($sessionDefault) {
      print "$sessionDefault\n";
   }
}