Advertisement
Guest User

Untitled

a guest
Jun 14th, 2015
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.67 KB | None | 0 0
  1. #!/bin/sh
  2. #
  3. # This is SORT OF LIKE an X session, but not quite. You get a command as the
  4. # first argument (it could be multiple words, so run it with "eval"). As a
  5. # special case, the command can be:
  6. # default - Run the appropriate Xclients startup (see the code below)
  7. # custom - Run ~/.xsession and if that's not available run 'default'
  8. #
  9. # (Note that other arguments could also follow, but only the command one is
  10. # right now relevant and supported)
  11. #
  12. # The output is ALREADY redirected to .xsession-errors in GDM. This way
  13. # .xsession-errors actually gets more output such as if the PreSession script
  14. # is failing. This also prevents DoS attacks if some app in the users session
  15. # can be prodded to dump lots of stuff on the stdout/stderr. We wish to be
  16. # robust don't we? In case you wish to use an existing script for other DM's,
  17. # you can just not redirect when GDMSESSION is set. GDMSESSION will always
  18. # be set from gdm.
  19. #
  20. # Also note that this is not run as a login shell, this is just executed.
  21. # This is why we source the profile files below.
  22. #
  23. # based on:
  24. # $XConsortium: Xsession /main/10 1995/12/18 18:21:28 gildea $
  25.  
  26. command="$@"
  27.  
  28. # this will go into the .xsession-errors along with all other echo's
  29. # good for debugging where things went wrong
  30. echo "$0: Beginning session setup..."
  31.  
  32. # First read /etc/profile and .profile
  33. test -f /etc/profile && . /etc/profile
  34. test -f "$HOME/.profile" && . "$HOME/.profile"
  35. # Second read /etc/xprofile and .xprofile for X specific setup
  36. test -f /etc/xprofile && . /etc/xprofile
  37. test -f "$HOME/.xprofile" && . "$HOME/.xprofile"
  38.  
  39. # Translation stuff
  40. if [ -x "/usr/lib/gdm/gdmtranslate" ] ; then
  41. gdmtranslate="/usr/lib/gdm/gdmtranslate"
  42. else
  43. gdmtranslate=
  44. fi
  45.  
  46. # Note that this should only go to zenity dialogs which always expect utf8
  47. gettextfunc () {
  48. if [ "x$gdmtranslate" != "x" ] ; then
  49. "$gdmtranslate" --utf8 "$1"
  50. else
  51. echo "$1"
  52. fi
  53. }
  54.  
  55. OLD_IFS=$IFS
  56.  
  57. gdmwhich () {
  58. COMMAND="$1"
  59. OUTPUT=
  60. IFS=:
  61. for dir in $PATH
  62. do
  63. if test -x "$dir/$COMMAND" ; then
  64. if test "x$OUTPUT" = "x" ; then
  65. OUTPUT="$dir/$COMMAND"
  66. fi
  67. fi
  68. done
  69. IFS=$OLD_IFS
  70. echo "$OUTPUT"
  71. }
  72.  
  73. zenity=`gdmwhich zenity`
  74.  
  75. # Note: ~/.xsession-errors is now done in the daemon so that it
  76. # works for ALL sessions (except ones named 'Failsafe')
  77.  
  78. # clean up after xbanner
  79. freetemp=`gdmwhich freetemp`
  80. if [ -n "$freetemp" ] ; then
  81. "$freetemp"
  82. fi
  83.  
  84. userresources="$HOME/.Xresources"
  85. usermodmap="$HOME/.Xmodmap"
  86. userxkbmap="$HOME/.Xkbmap"
  87.  
  88. sysresources=/etc/X11/Xresources
  89. sysmodmap=/etc/X11/Xmodmap
  90. sysxkbmap=/etc/X11/Xkbmap
  91.  
  92. rh6sysresources=/etc/X11/xinit/Xresources
  93. rh6sysmodmap=/etc/X11/xinit/Xmodmap
  94.  
  95. # merge in defaults
  96. if [ -f "$rh6sysresources" ]; then
  97. xrdb -nocpp -merge "$rh6sysresources"
  98. fi
  99.  
  100. if [ -f "$sysresources" ]; then
  101. xrdb -nocpp -merge "$sysresources"
  102. fi
  103.  
  104. if [ -f "$userresources" ]; then
  105. xrdb -nocpp -merge "$userresources"
  106. fi
  107.  
  108. # merge in keymaps
  109. if [ -f "$sysxkbmap" ]; then
  110. setxkbmap `cat "$sysxkbmap"`
  111. XKB_IN_USE=yes
  112. fi
  113.  
  114. if [ -f "$userxkbmap" ]; then
  115. setxkbmap `cat "$userxkbmap"`
  116. XKB_IN_USE=yes
  117. fi
  118.  
  119. #
  120. # Eeek, this seems like too much magic here
  121. #
  122. if [ -z "$XKB_IN_USE" -a ! -L /etc/X11/X ]; then
  123. if grep '^exec.*/Xsun' /etc/X11/X > /dev/null 2>&1 && [ -f /etc/X11/XF86Config ]; then
  124. xkbsymbols=`sed -n -e 's/^[ ]*XkbSymbols[ ]*"\(.*\)".*$/\1/p' /etc/X11/XF86Config`
  125. if [ -n "$xkbsymbols" ]; then
  126. setxkbmap -symbols "$xkbsymbols"
  127. XKB_IN_USE=yes
  128. fi
  129. fi
  130. fi
  131.  
  132. # xkb and xmodmap don't play nice together
  133. if [ -z "$XKB_IN_USE" ]; then
  134. if [ -f "$rh6sysmodmap" ]; then
  135. xmodmap "$rh6sysmodmap"
  136. fi
  137.  
  138. if [ -f "$sysmodmap" ]; then
  139. xmodmap "$sysmodmap"
  140. fi
  141.  
  142. if [ -f "$usermodmap" ]; then
  143. xmodmap "$usermodmap"
  144. fi
  145. fi
  146.  
  147. unset XKB_IN_USE
  148.  
  149. xhost +si:localuser:`id -un` || :
  150.  
  151. # run all system xinitrc shell scripts.
  152. if [ -d /etc/X11/xinit/xinitrc.d ]; then
  153. for i in /etc/X11/xinit/xinitrc.d/* ; do
  154. if [ -x "$i" -a ! -d "$i" ]; then
  155. . "$i"
  156. fi
  157. done
  158. fi
  159.  
  160. if [ "x$command" = "xcustom" ] ; then
  161. if [ -x "$HOME/.xsession" ]; then
  162. command="$HOME/.xsession"
  163. else
  164. echo "$0: Cannot find ~/.xsession will try the default session"
  165. command="default"
  166. fi
  167. fi
  168.  
  169. if [ "x$command" = "xdefault" ] ; then
  170. if [ -x "$HOME/.Xclients" ]; then
  171. command="$HOME/.Xclients"
  172. elif [ -x /etc/X11/xinit/Xclients ]; then
  173. command="/etc/X11/xinit/Xclients"
  174. elif [ -x /etc/X11/Xclients ]; then
  175. command="/etc/X11/Xclients"
  176. else
  177. if [ -n "$zenity" ] ; then
  178. disptext=`gettextfunc "System has no Xclients file, so starting a failsafe xterm session. Windows will have focus only if the mouse pointer is above them. To get out of this mode type 'exit' in the window."`
  179. "$zenity" --info --text "$disptext"
  180. else
  181. echo "$0: Cannot find Xclients"
  182. fi
  183. exec xterm -geometry 80x24+0+0
  184. fi
  185. fi
  186.  
  187. # add ssh-agent if found
  188. sshagent="`gdmwhich ssh-agent`"
  189. if [ -n "$sshagent" ] && [ -x "$sshagent" ] && [ -z "$SSH_AUTH_SOCK" ]; then
  190. command="$sshagent -- $command"
  191. elif [ -z "$sshagent" ] ; then
  192. echo "$0: ssh-agent not found!"
  193. fi
  194.  
  195. echo "$0: Setup done, will execute: $command"
  196.  
  197. eval exec $command
  198.  
  199. echo "$0: Executing $command failed, will run xterm"
  200.  
  201. if [ -n "$zenity" ] ; then
  202. disptext=`gettextfunc "Failed to start the session, so starting a failsafe xterm session. Windows will have focus only if the mouse pointer is above them. To get out of this mode type 'exit' in the window."`
  203. "$zenity" --info --text "$disptext"
  204. fi
  205.  
  206. exec xterm -geometry 80x24+0+0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement