[geklärt] .xinitrc

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
dasebastian
Beiträge: 1885
Registriert: 12.07.2020 11:21:17

[geklärt] .xinitrc

Beitrag von dasebastian » 19.02.2023 15:46:07

Stelle gerade mein Awesomesystem ein bisschen um, die "Autostarts" wandern in die ~/.xinitrc:

Code: Alles auswählen

sebastian@t420:~$ cat .xinitrc 
#!/bin/sh

xfce4-power-manager &
/usr/bin/lxpolkit &
xautolock -time 5 -locker slock &
volumeicon &
udiskie &
nm-applet &
exec awesome
sebastian@t420:~$ 
Es scheint alles zu funktionieren, wie gewohnt, drei Fragen zum Verständnis stellen sich mir noch:

* Braucht die .xinitrc einen Shebang? Das Beispiel aus dem Debianwiki hat keinen, die /etc/X11/xinit/xinitrc aber schon (beides funktioniert bei mir).

* In der genannten /etc/X11/xinit/xinitrc gibt es die Einbindung von von ". /etc/X11/Xsession", die ja ziemlich umfangreich ist. Sollte ich das auch übernehmen?!

* Das Manual zu startx legt mir nahe, nicht eine ~/.xinitrc anzulegen, stattdessen eine ~/.xsession oder ~/.startxrc. Wenn ich es richtig verstehe, damit ich nicht von startx oder xinit abhängig bin. Ist das wirklich ein gängiger Weg? Hier der Auszug:

Code: Alles auswählen

Note  that  in the Debian system, what many people traditionally put in
       the .xinitrc file should go in .xsession instead; this permits the same
       X  environment to be presented whether startx, xdm, or xinit is used to
       start the X session.  All  discussion  of  the  .xinitrc  file  in  the
       xinit(1)  manual  page applies equally well to .xsession.  Keep in mind
       that .xinitrc is used  only  by  xinit(1)  and  completely  ignored  by
       xdm(1).

       To  determine  the client to run, startx looks for the following files,
       in order:

              $(HOME)/.startxrc

              /usr/lib/x86_64-linux-gnu/sys.startxrc

              $(HOME)/.xinitrc

              /etc/X11/xinit/xinitrc
Zuletzt geändert von dasebastian am 20.02.2023 08:19:49, insgesamt 1-mal geändert.

chrbr
Beiträge: 550
Registriert: 29.10.2022 15:53:26

Re: .xinitrc

Beitrag von chrbr » 19.02.2023 16:01:54

dasebastian hat geschrieben: ↑ zum Beitrag ↑
19.02.2023 15:46:07
Braucht die .xinitrc einen Shebang?
In meiner .xinitrc habe ich auch keine Shebang Zeile. Irgendwo meine ich gelesen zu haben, dass .xinitrc "gesourced" wird und deshalb keine Sheband Zeile nötig ist.
dasebastian hat geschrieben: ↑ zum Beitrag ↑
19.02.2023 15:46:07
Das Manual zu startx legt mir nahe, nicht eine ~/.xinitrc anzulegen, stattdessen eine ~/.xsession oder ~/.startxrc. Wenn ich es richtig verstehe, damit ich nicht von startx oder xinit abhängig bin. Ist das wirklich ein gängiger Weg?
Das ist mir auch neu. Ich verwende aber auch keinen Anmelde-Manager, sondern nur startx. Probier es aus, Versuch macht kluch :THX: .
Zur Einbindung von XSession weiß ich nichts. Ich würde es erst einmal bleiben lassen.

dasebastian
Beiträge: 1885
Registriert: 12.07.2020 11:21:17

Re: .xinitrc

Beitrag von dasebastian » 19.02.2023 16:14:10

chrbr hat geschrieben: ↑ zum Beitrag ↑
19.02.2023 16:01:54
Ich verwende aber auch keinen Anmelde-Manager, sondern nur startx.
Hier auch nur startx. Die XSession wollte ich auch nicht (einfach so) ausprobieren (einbinden) und als ich das (mit xsessionrc und startxrc) gelesen hatte, war die xinitrc schon fertig. Gut, umbenennen ist jetzt keine große Sache, ich wollte einfach beim mir geläufigen bleiben.

EDITS: Die Klammernsachen.

dasebastian
Beiträge: 1885
Registriert: 12.07.2020 11:21:17

Re: .xinitrc

Beitrag von dasebastian » 20.02.2023 08:19:29

Gut, nachdem meine Fragen wohl allzu banal waren, hier meine Schlussfolgerungen:

Die ~/.xinitrc wird von startx gesourced, sie funktioniert mit oder ohne Shebang, ich lasse den mal drinnen.

Die Einbindung von Xsession lasse ich bleiben, so wie auch chrbr das gemeint hat, ich habe das in keiner xinitrc so gesehen, die ich bei der Suche im Netz so gefunden habe.

Spannender ist die Geschichte mit der ~/.startxrc:
Nach Umbenennen der xinitrc zu startxrc startet zwar die Awesomesession anstandslos, die einzelnen mitgegebenen Komponenten werden aber NICHT gestartet. Dieser Sache bin ich jetzt aber nicht weiter auf den Grund gegangen, ich bleibe bei ~/.xinitrc.

uname
Beiträge: 12075
Registriert: 03.06.2008 09:33:02

Re: [geklärt] .xinitrc

Beitrag von uname » 20.02.2023 08:48:02

dasebastian hat geschrieben:Spannender ist die Geschichte mit der ~/.startxrc:
Bist du sicher, dass sie dann als .startxrc oder sonstwie verwendet wird? Du könntest sie mal ganz löschen oder einfach .irgendwas nennen. Ich denke da wirst du keinen Unterschied haben.

Ich befürchte eher, dass startx aus Debianxinit dann einfach die /etc/X11/xinit/xinitrc (siehe Liste der Dateien) verwendet.

Was steht in /etc/X11/xinit/xinitrc? Was passiert, wenn du die Datei mal umbenennst oder löscht?
Du könntest auch Debianstrace bemühen um zu sehen welche Dateien wirklich geladen werden.

dasebastian
Beiträge: 1885
Registriert: 12.07.2020 11:21:17

Re: [geklärt] .xinitrc

Beitrag von dasebastian » 20.02.2023 09:29:02

uname hat geschrieben: ↑ zum Beitrag ↑
20.02.2023 08:48:02
Bist du sicher, dass sie dann als .startxrc oder sonstwie verwendet wird? Du könntest sie mal ganz löschen oder einfach .irgendwas nennen. Ich denke da wirst du keinen Unterschied haben.
Ja, da hast du Recht, kompletter Aussetzer meinerseits, lief ja auch vorher ohne xinitrc oder xstartrc. :facepalm: Awesome fährt normal hoch, natürlich ohne die Autostarts.
Was steht in /etc/X11/xinit/xinitrc?

Code: Alles auswählen

sebastian@t420:~$ cat /etc/X11/xinit/xinitrc 
#!/bin/sh

# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)

# invoke global X session script
. /etc/X11/Xsession
sebastian@t420:~$ cat /etc/X11/Xsession
#!/bin/sh
#
# /etc/X11/Xsession
#
# global Xsession file -- used by display managers and xinit (startx)

# $Id: Xsession 967 2005-12-27 07:20:55Z dnusinow $

set -e

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" ] && which xmessage > /dev/null 2>&1; then
    echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file -
  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" ] && which xmessage > /dev/null 2>&1; then
    echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file -
  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 \"x11-common\"" \
           "package and the complete text of this error message to" \
           "<debian-x@lists.debian.org>."
}

# initialize variables for use by all session scripts

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
ERRFILE=

OPTIONS="$(
  if [ -r "$OPTIONFILE" ]; then
    cat "$OPTIONFILE"
  fi
  if [ -d /etc/X11/Xsession.options.d ]; then
    run-parts --list --regex '\.conf$' /etc/X11/Xsession.options.d | xargs -d '\n' cat
  fi
)"

has_option() {
  # Ensure that a later no-foo overrides an earlier foo
  if [ "$(echo "$OPTIONS" | grep -Eo "^(no-)?$1\>" | tail -n 1)" = "$1" ]; then
    return 0
  else
    return 1
  fi
}

# attempt to create an error file; abort if we cannot
if (umask 077 && touch "$ERRFILE") 2> /dev/null && [ -w "$ERRFILE" ] &&
  [ ! -L "$ERRFILE" ]; then
  chmod 600 "$ERRFILE"
elif ERRFILE=$(tempfile 2> /dev/null); then
  if ! ln -sf "$ERRFILE" "${TMPDIR:=/tmp}/xsession-$USER"; then
    message "warning: unable to symlink \"$TMPDIR/xsession-$USER\" to" \
             "\"$ERRFILE\"; look for session log/errors in" \
             "\"$TMPDIR/xsession-$USER\"."
  fi
else
  errormsg "unable to create X session log/error file; aborting."
fi

exec >>"$ERRFILE" 2>&1

echo "$PROGNAME: X session started for $LOGNAME at $(date)"

# sanity check; is our session script directory present?
if [ ! -d "$SYSSESSIONDIR" ]; then
  errormsg "no \"$SYSSESSIONDIR\" directory found; aborting."
fi

# Attempt to create a file of non-zero length in /tmp; a full filesystem can
# cause mysterious X session failures.  We do not use touch, :, or test -w
# because they won't actually create a file with contents.  We also let standard
# error from tempfile and echo go to the error file to aid the user in
# determining what went wrong.
WRITE_TEST=$(tempfile)
if ! echo "*" >>"$WRITE_TEST"; then
  message "warning: unable to write to ${WRITE_TEST%/*}; X session may exit" \
          "with an error"
fi
rm -f "$WRITE_TEST"

# use run-parts to source every file in the session directory; we source
# instead of executing so that the variables and functions defined above
# are available to the scripts, and so that they can pass variables to each
# other
SESSIONFILES=$(run-parts --list $SYSSESSIONDIR)
if [ -n "$SESSIONFILES" ]; then
  set +e
  for SESSIONFILE in $SESSIONFILES; do
    . $SESSIONFILE
  done
  set -e
fi

exit 0

# vim:set ai et sts=2 sw=2 tw=80:
sebastian@t420:~$ 
Für Debianstrace fehlt mir im Moment jetzt gerade die Motivation, ich hab es mir mal notiert, weil lustig ist das schon mit dem Hinweis auf startxrc in der Manpage von startx.

Antworten