Das Skript /usr/bin/startxfce4
scheint von einem Parser generiert zu werden. Wir können sehen, dass wir uns beim Betrachten des Quellcodes das entsprechende Snippet ansehen:
if test "x$XDG_DATA_DIRS" = "x"
then
if test "x@_datadir_@" = "x/usr/local/share" -o "x@_datadir_@" = "x/usr/share"; then
XDG_DATA_DIRS="/usr/local/share:/usr/share"
else
XDG_DATA_DIRS="@_datadir_@:/usr/local/share:/usr/share"
fi
else
XDG_DATA_DIRS="$XDG_DATA_DIRS:@_datadir_@"
fi
export XDG_DATA_DIRS
Hier können wir die Bedeutung dieses if-Blocks sehen. Die Entwickler geben Paket-Maitainern die Möglichkeit, einen benutzerdefinierten Pfad hinzuzufügen, XDG_DATA_DIRS
indem sie den gewünschten Pfad zum Skript analysieren und die Zeichenfolge @_datadir_@
durch diesen Pfad ersetzen .
Dies funktioniert einwandfrei, wenn ein Pfad analysiert wird, XDG_DATA_DIRS
der zum Zeitpunkt der Skriptausführung nicht enthalten ist. Der Pfad wird jedoch zweimal angezeigt, wenn ein Pfad analysiert wird, der zum Zeitpunkt der Skriptausführung XDG_DATA_DIRS
bereits vorhanden ist XDG_DATA_DIRS
.
Dies könnte vermieden werden, indem die Standard-XDG-Ordner ( /usr/share
, /usr/local/share
) nicht im Skript analysiert werden. Ich weiß jedoch nicht, ob dies möglich ist.
Eine andere Lösung besteht darin, den Quellcode in zu ändern
if test "x$XDG_DATA_DIRS" = "x"
then
if test "x@_datadir_@" = "x/usr/local/share" -o "x@_datadir_@" = "x/usr/share"; then
XDG_DATA_DIRS="/usr/local/share:/usr/share"
else
XDG_DATA_DIRS="@_datadir_@:/usr/local/share:/usr/share"
fi
else
if test "x@_datadir_@" != "x/usr/local/share" -a "x@_datadir_@" != "x/usr/share"; then
XDG_DATA_DIRS="$XDG_DATA_DIRS:@_datadir_@"
fi
fi
export XDG_DATA_DIRS
Das würde nur die Verzeichnisse abdecken /usr/share
und /usr/local/share
obwohl und man sollte in der Tat prüfen, ob es @_datadir_@
bereits existiert XDG_DATA_DIRS
oder nicht, aber ich weiß nicht, wer das tun soll, mein Wissen endet hier.
In Ergänzung:
Gleiches gilt für diesen Teil des Skripts:
if test "x$XDG_CONFIG_DIRS" = "x"
then
if test "x@_sysconfdir_@" = "x/etc"; then
XDG_CONFIG_DIRS="/etc/xdg"
else
XDG_CONFIG_DIRS="/etc/xdg:@_sysconfdir_@/xdg"
fi
else
XDG_CONFIG_DIRS="$XDG_CONFIG_DIRS:@_sysconfdir_@/xdg"
fi
export XDG_CONFIG_DIRS
Wenn wir es analysieren /etc/xdg
/ ersetzen, wird @_sysconfdir_@
es zu einem doppelten Pfad ( /etc/xdg:/etc/xdg
in XDG_CONFIG_DIRS
.
Schöne Grüße
Ich bin ein Endbenutzer, weit davon entfernt, Entwickler zu sein, daher kann ich das Problem nicht vollständig lösen. Dank Dessert und Melebius , die mich in die richtige Richtung getrieben haben, verstehe ich diese Wenn-Dann-Aussage jetzt zumindest.
Ich glaube, dass es nicht schadet, in diesen Umgebungsvariablen zweimal einen Pfad zu haben, daher werde ich keinen Fehler melden. Lassen Sie die Entwickler wertvollere Dinge tun.
Meine persönliche Lösung
Ich habe die Zeilen 67-89 in geändert /usr/bin/startxfce4
if test "x$XDG_DATA_DIRS" = "x"
then
if test "x/usr/share" = "x/usr/local/share" -o "x/usr/share" = "x/usr/share"; then
XDG_DATA_DIRS="/usr/local/share:/usr/share"
else
XDG_DATA_DIRS="/usr/share:/usr/local/share:/usr/share"
fi
else
XDG_DATA_DIRS="$XDG_DATA_DIRS:/usr/share"
fi
export XDG_DATA_DIRS
if test "x$XDG_CONFIG_DIRS" = "x"
then
if test "x/etc" = "x/etc"; then
XDG_CONFIG_DIRS="/etc/xdg"
else
XDG_CONFIG_DIRS="/etc/xdg:/etc/xdg"
fi
else
XDG_CONFIG_DIRS="$XDG_CONFIG_DIRS:/etc/xdg"
fi
export XDG_CONFIG_DIRS
zu
if test "x$XDG_DATA_DIRS" = "x"
then
XDG_DATA_DIRS="/usr/local/share:/usr/share"
fi
export XDG_DATA_DIRS
if test "x$XDG_CONFIG_DIRS" = "x"
then
XDG_CONFIG_DIRS="/etc/xdg"
fi
export XDG_CONFIG_DIRS
Natürlich habe ich zuerst die Originaldatei gesichert.