Benutzerspezifische Umgebungsvariablen in .desktop Dateien, geht das?

26/01/2014 - 21:27 von Uwe Scholz | Report spam
Hallo an alle!


Erst mal meine Frage, die Erlàuterung dazu folgt unten:

Wie kann man erreichen, dass Farbeinstellungen eines Nutzers über die
Variable LS_COLORS an das zu startende Programm übergeben werden, wenn
die zugehörige .desktop-Datei angeklickt wird?


Erlàuterung:

in einem grafischen C++ Programm wird bei mir die Umgebungsvariable
LS_COLORS ausgewertet. Starte ich das Programm in der Konsole, so werden
meine lokal gesetzten Terminalfarben aus ~./dir_colors im Programm
genutzt. (Da beim Start der Konsole die Terminalfarben entsprechend
gesetzt wurden.(*))

Starte ich das Programm hingegen durch Klick auf die zugehörige
.desktop-Datei, so werden die Systemfarben, abgespeichert in
/etc/DIR_COLORS verwendet. Diese unterscheiden sich aber zu denen in
~./dir_colors.

Mit ist bewusst, dass man Umgebungsvariablen in einer Desktop-Datei über
die Benutzung von "env" setzen kann, also zum Beispiel durch:

Exec=env LS_COLORS="rs=0:di;36:ln;" Programm

In einer .desktop-Datei, die in einem Systemordner liegt, könnte man so
allerdings nicht die lokal gesetzten Farben der einzelnen Benutzer
berücksichtigen. Zur Lösung dieses Problems habe ich daher folgende drei
Versuche unternommen:

1.:

Exec=env "LS_COLORS=\$(if [[ -f ~/.dir_colors ]]; then dircolors -b \
~/.dir_colors; fi | head -n 1 | sed -e 's?LS_COLORS=??g')" \
Programm

2.:

Exec=/bin/bash -c "env LS_COLORS=\$(if [[ -f ~/.dir_colors ]]; then \
dircolors -b ~/.dir_colors; fi | head -n 1 | sed -e 's?LS_COLORS\"=??g') \
Programm"

3.:

Exec=/bin/bash -c "eval \$(dircolors -b ~/.dir_colors) && Programm"

Alle drei Varianten führten jedoch nicht zum gewünschten Erfolg und die
Variable LS_COLORS blieb entweder leer (erste und zweiter Versuch), oder
die Systemeinstellung wurde verwendet (dritter Versuch).

Kann mir hier jemand weiter helfen? Wie kann man die Variable LS_COLORS
in einer .desktop-Datei variabel setzen???


Viele Grüße,
Uwe


(*) Der entsprechende Befehl dazu steht in /etc/bash/bashrc:
if [[ -f ~/.dir_colors ]] ; then
eval $(dircolors -b ~/.dir_colors)
elif [[ -f /etc/DIR_COLORS ]] ; then
eval $(dircolors -b /etc/DIR_COLORS)
fi
 

Lesen sie die antworten

#1 Peter J. Holzer
26/01/2014 - 23:04 | Warnen spam
On 2014-01-26 20:27, Uwe Scholz wrote:
Erst mal meine Frage, die Erlàuterung dazu folgt unten:

Wie kann man erreichen, dass Farbeinstellungen eines Nutzers über die
Variable LS_COLORS an das zu startende Programm übergeben werden, wenn
die zugehörige .desktop-Datei angeklickt wird?



Ich formuliere das um:

Wie kann ich erreichen, dass die Variable LS_COLORS (oder allgemeiner:
Eine beliebige Environment-Variable) beim Aufruf eines Programms direkt
aus dem Desktop-Environment (ohne Shell) den gewünschten Wert hat?

Erlàuterung:

in einem grafischen C++ Programm wird bei mir die Umgebungsvariable
LS_COLORS ausgewertet. Starte ich das Programm in der Konsole, so werden
meine lokal gesetzten Terminalfarben aus ~./dir_colors im Programm
genutzt. (Da beim Start der Konsole die Terminalfarben entsprechend
gesetzt wurden.(*))

Starte ich das Programm hingegen durch Klick auf die zugehörige
.desktop-Datei, so werden die Systemfarben, abgespeichert in
/etc/DIR_COLORS verwendet. Diese unterscheiden sich aber zu denen in
~./dir_colors.

Mit ist bewusst, dass man Umgebungsvariablen in einer Desktop-Datei über
die Benutzung von "env" setzen kann, also zum Beispiel durch:


[...]
Kann mir hier jemand weiter helfen? Wie kann man die Variable LS_COLORS
in einer .desktop-Datei variabel setzen???



Willst Du sie überhaupt in .desktop-Datei setzen? Wàre es nicht
sinnvoller, sie würde beim Login gesetzt und gàlte dann für alle
Programme?

Zumindest unter Debian werden im Xsession die Files $HOME/.profile und
$HOME/.xprofile gesourct, wenn sie existieren. Ein Benutzer, der
LS_COLORS setzen will, kann das also einfach in seinem .profile oder
.xprofile tun. Falls Du das für alle User vorgeben willst, kannst Du
auch in /etc/X11/Xsession.d ein entsprechendes Script anlegen.

hp

_ | Peter J. Holzer | Fluch der elektronischen Textverarbeitung:
|_|_) | | Man feilt solange an seinen Text um, bis
| | | | die Satzbestandteile des Satzes nicht mehr
__/ | http://www.hjp.at/ | zusammenpaßt. -- Ralph Babel

Ähnliche fragen