[Stable] Something wrong with default xinitrc


#1

With the default config I can’t start X11 with the session I give it as a param. I tried :

xinit openbox -- :1
startx openbox
startx ~/.xinitrc openbox

I installed openbox just to test this .
It aways launches the default desktop .

I think that the function get_session is the problem since I modified lines 40-66 to be :

case $1 in
	awesome) dbus_args=(awesome) ;;
	bspwm) dbus_args=(bspwm-session) ;;
	budgie) dbus_args=(budgie-desktop) ;;
	cinnamon) dbus_args=(cinnamon-session) ;;
	deepin) dbus_args=(startdde) ;;
	enlightenment) dbus_args=(enlightenment_start) ;;
	fluxbox) dbus_args=(startfluxbox) ;;
	gnome) dbus_args=(gnome-session) ;;
	i3|i3wm) dbus_args=(i3 --shmlog-size 0) ;;
	jwm) dbus_args=(jwm) ;;
	kde) dbus_args=(startkde) ;;
	lxde) dbus_args=(startlxde) ;;
	lxqt) dbus_args=(lxqt-session) ;;
	mate) dbus_args=(mate-session) ;;
	xfce) dbus_args=(xfce4-session) ;;
	openbox) dbus_args=(openbox-session) ;;
	*) dbus_args=($DEFAULT_SESSION) ;;
esac

exec dbus-launch ${dbus_args[*]}

Basicly I removed the function since it coused the problem , and everything works fine now.
Is someone else having this issue with default config ? Why does the function couse the problem ?
Link to default .xinitrc


[Testing Update x32] 2018-01-04 - Kernels, Desktop settings, TLP
[Stable Update x32] 2018-01-06 - Kernels, keyring, TLP, Desktop settings
#2

A few points:

  • By editing the get_session() function you’ve broken the rest of the arguments passed to DBUS, so that won’t work as expected any more.

  • startx doesn’t take arguments like that.

  • openbox is the window manager, not the desktop session. You need to use openbox-session for that, and you’d normally just pick that from the login manager.

man startx

NAME
       startx - initialize an X session

SYNOPSIS
       startx  [ [ client ] options ... ] [ -- [ server ] [ display ] options ...
       ]

DESCRIPTION
       The startx script is a front end to  xinit(1)  that  provides  a  somewhat
       nicer  user interface for running a single session of the X Window System.
       It is often run with no arguments.

       Arguments immediately following the startx command are  used  to  start  a
       client  in  the  same manner as xinit(1).  The special argument '--' marks
       the end of client arguments and the beginning of server options.   It  may
       be  convenient  to  specify server options with startx to change on a per-
       session basis the default color depth, the server's notion of  the  number
       of  dots-per-inch the display device presents, or take advantage of a dif‐
       ferent server layout, as permitted by the Xorg(1) server and specified  in
       the  xorg.conf(5) configuration.  Some examples of specifying server argu‐
       ments follow; consult the manual page for your X server to determine which
       arguments are legal.

              startx -- -depth 16

              startx -- -dpi 100

              startx -- -layout Multihead

       To  determine  the  client  to  run,  startx first looks for a file called
       .xinitrc in the user's home directory.  If that is not found, it uses  the
       file  xinitrc  in  the  xinit  library  directory.  If command line client
       options are given, they override this behavior and revert to the  xinit(1)
       behavior.   To  determine the server to run, startx first looks for a file
       called .xserverrc in the user's home directory.  If that is not found,  it
       uses  the  file xserverrc in the xinit library directory.  If command line
       server options are given, they override this behavior and  revert  to  the
       xinit(1)  behavior.   Users rarely need to provide a .xserverrc file.  See
       the xinit(1) manual page for more details on the arguments.

       The  system-wide  xinitrc  and  xserverrc   files   are   found   in   the
       /etc/X11/xinit directory.

       The .xinitrc is typically a shell script which starts many clients accord‐
       ing to the user's preference.  When this shell script exits, startx  kills
       the  server  and  performs any other session shutdown needed.  Most of the
       clients started by .xinitrc should be run in  the  background.   The  last
       client should run in the foreground; when it exits, the session will exit.
       People often choose a session manager, window manager,  or  xterm  as  the
       ''magic'' client.

EXAMPLE
       Below is a sample .xinitrc that starts several applications and leaves the
       window manager running as the ''last''  application.   Assuming  that  the
       window  manager  has  been  configured properly, the user then chooses the
       ''Exit'' menu item to shut down X.

           xrdb -load $HOME/.Xresources
           xsetroot -solid gray &
           xbiff -geometry -430+5 &
           oclock -geometry 75x75-0-0 &
           xload -geometry -80-0 &
           xterm -geometry +0+60 -ls &
           xterm -geometry +0-100 &
           xconsole -geometry -0+0 -fn 5x7 &
           exec twm

ENVIRONMENT VARIABLES
       DISPLAY                  This variable gets set to the name of the display
                                to  which clients should connect.  Note that this
                                gets set, not read.

       XAUTHORITY               This variable, if not already defined,  gets  set
                                to $(HOME)/.Xauthority.  This is to prevent the X
                                server, if not given  the  -auth  argument,  from
                                automatically   setting  up  insecure  host-based
                                authentication  for  the  local  host.   See  the
                                Xserver(1) and Xsecurity(7) manual pages for more
                                information on X client/server authentication.

FILES
       $(HOME)/.xinitrc         Client to run.  Typically a  shell  script  which
                                runs many programs in the background.

       $(HOME)/.xserverrc       Server to run.  The default is X.

       /etc/X11/xinit/xinitrc   Client to run if the user has no .xinitrc file.

       /etc/X11/xinit/xserverrc Server to run if the user has no .xserverrc file.

SEE ALSO
       xinit(1), X(7), Xserver(1), Xorg(1), xorg.conf(5)


#3
  • Yes I am aware I removed the other arguments . It is a quick fix until the issue is fixed (If it affects more people than me ofcourse . Else I have done something wrong) .

  • The arch wiki told me otherwise . Direct link.

  • The “case statement” in the .xinitrc config file states that if I enter openbox as an argument to xinitrc it will run openbox-session . So I am starting openbox-session not openbox directly. The exact line :

get_session(){
	local dbus_args=(--sh-syntax --exit-with-session)
	case $1 in
		awesome) dbus_args+=(awesome) ;;
		bspwm) dbus_args+=(bspwm-session) ;;
		budgie) dbus_args+=(budgie-desktop) ;;
		cinnamon) dbus_args+=(cinnamon-session) ;;
		deepin) dbus_args+=(startdde) ;;
		enlightenment) dbus_args+=(enlightenment_start) ;;
		fluxbox) dbus_args+=(startfluxbox) ;;
		gnome) dbus_args+=(gnome-session) ;;
		i3|i3wm) dbus_args+=(i3 --shmlog-size 0) ;;
		jwm) dbus_args+=(jwm) ;;
		kde) dbus_args+=(startkde) ;;
		lxde) dbus_args+=(startlxde) ;;
		lxqt) dbus_args+=(lxqt-session) ;;
		mate) dbus_args+=(mate-session) ;;
		xfce) dbus_args+=(xfce4-session) ;;
		openbox) dbus_args+=(openbox-session) ;; # <-- This line
		*) dbus_args+=($DEFAULT_SESSION) ;;
esac

#4

OK, so I misinterpreted the entirety of the OP… :pensive:

The change was introduced in this commit:

The way I read it,

get_session(){
	local dbus_args=(--sh-syntax --exit-with-session)
	case $1 in
		awesome) dbus_args+=(awesome) ;;
		bspwm) dbus_args+=(bspwm-session) ;;
		budgie) dbus_args+=(budgie-desktop) ;;
		cinnamon) dbus_args+=(cinnamon-session) ;;
		deepin) dbus_args+=(startdde) ;;
		enlightenment) dbus_args+=(enlightenment_start) ;;
		fluxbox) dbus_args+=(startfluxbox) ;;
		gnome) dbus_args+=(gnome-session) ;;
		i3|i3wm) dbus_args+=(i3 --shmlog-size 0) ;;
		jwm) dbus_args+=(jwm) ;;
		kde) dbus_args+=(startkde) ;;
		lxde) dbus_args+=(startlxde) ;;
		lxqt) dbus_args+=(lxqt-session) ;;
		mate) dbus_args+=(mate-session) ;;
		xfce) dbus_args+=(xfce4-session) ;;
		openbox) dbus_args+=(openbox-session) ;;
		*) dbus_args+=($DEFAULT_SESSION) ;;
	esac

	echo "dbus-launch ${dbus_args[*]}"
}

exec $(get_session)

the get_session() function is expecting a parameter ($1) to test, but none is provided via exec $(get_session), therefore it falls through to the default case.

I suspect there’s something missing from the exec line. I’ll ping @oberon as he committed this change an might know more.

OR

Is it the

DEFAULT_SESSION=xfce4-session

line which should be

DEFAULT_SESSION=${1:-xfce4-session}

instead?


After some testing,

exec $(get_session $1)

will work as expected.


(moved from #technical-issues-and-assistance to #manjaro-development)


#5

Actually, this should work better:

SESSION=${1:-xfce}

get_session(){
	local dbus_args=(--sh-syntax --exit-with-session)
	case $SESSION in
		awesome) dbus_args+=(awesome) ;;
		bspwm) dbus_args+=(bspwm-session) ;;
		budgie) dbus_args+=(budgie-desktop) ;;
		cinnamon) dbus_args+=(cinnamon-session) ;;
		deepin) dbus_args+=(startdde) ;;
		enlightenment) dbus_args+=(enlightenment_start) ;;
		fluxbox) dbus_args+=(startfluxbox) ;;
		gnome) dbus_args+=(gnome-session) ;;
		i3|i3wm) dbus_args+=(i3 --shmlog-size 0) ;;
		jwm) dbus_args+=(jwm) ;;
		kde) dbus_args+=(startkde) ;;
		lxde) dbus_args+=(startlxde) ;;
		lxqt) dbus_args+=(lxqt-session) ;;
		mate) dbus_args+=(mate-session) ;;
		xfce) dbus_args+=(xfce4-session) ;;
		openbox) dbus_args+=(openbox-session) ;;
		*) dbus_args+=("$SESSION") ;;
	esac

	echo "dbus-launch ${dbus_args[*]}"
}

exec $(get_session)

and because of the += the shebang should be bash not sh. I’ll PR this to the package GitHub repo:


#6

The script works as intended now . Thank you.


closed #7

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.