Piszę bash
skrypt, który musi wiedzieć, które środowisko pulpitu (XFCE, Unity, KDE, LXDE, Mate, Cinnamon, GNOME2, GNOME3, ...) jest uruchomione.
Jak mogę uzyskać te informacje?
bash
desktop-environment
bash-script
Serge Stroobandt
źródło
źródło
xplanet
i chciałbym automatycznie odświeżyć tło pulpitu za pomocą poleceń specyficznych dla środowiska pulpitu. Jeśli chcesz opublikować odpowiedź na ten problem , kliknij link.Odpowiedzi:
Główny problem ze sprawdzaniem
DESKTOP_SESSION
polega na tym, że jest on ustawiany przez menedżera wyświetlania, a nie sesję pulpitu, i jest niespójny. Wlightdm
Debianie wartości pochodzą od nazw plików pod/usr/share/xsessions/
.DESKTOP_SESSION
odzwierciedla środowisko pulpitu, jeśli podczas logowania dokonany zostanie określony wybór, jednaklightdm-xsession
zawsze używana jest sesja domyślna.GDMSESSION
jest kolejną opcją, ale wydaje się mieć podobne położenie (to ta sama wartość, coDESKTOP_SESSION
dla mnie).XDG_CURRENT_DESKTOP
wygląda na dobry wybór, jednak obecnie nie jest on w standardzie XDG i dlatego nie zawsze jest implementowany. Zobacz tutaj do dyskusji o tym. Ta odpowiedź pokazuje jego wartości dla różnych dystrybucji / komputerów stacjonarnych, mogę również potwierdzić, że obecnie nie jest dla mnie dostępna w XFCE.Uzasadnionym rozwiązaniem
XDG_CURRENT_DESKTOP
nieistniejącym byłoby spróbowanieXDG_DATA_DIRS
. Pod warunkiem, że pliki danych dla środowiska pulpitu są zainstalowane w katalogu z jego nazwą, to podejście powinno działać. Miejmy nadzieję, że tak będzie w przypadku wszystkich dystrybucji / komputerów stacjonarnych!Następujące (z GNU grep) testy dla XFCE, KDE i Gnome:
Kompatybilny z POSIX:
Aby połączyć z sprawdzaniem
XDG_CURRENT_DESKTOP
:źródło
apt-file
jest również dobrym narzędziem do sprawdzenia, gdzie instalują się różne komputery stacjonarne.XDG_DATA_DIRS
nie istnieje lub po prostu nie zawiera nic przydatnego?||
stylu. Nadal to pytanie zostało zadane na innych stronach SE, myślę, że mamy najlepszy zestaw odpowiedzi.Metoda nr 1 - $ DESKTOP_SESSION
Myślę, że można to sprawdzić, sprawdzając zmienną środowiskową
$DESKTOP_SESSION
. Nie jestem do końca przekonany, jak szeroko jest to obsługiwane, ale w moich ograniczonych testach wydaje się, że jest dostępny na Fedorze i Ubuntu.Innym wyborem jest
$XDG_SESSION_DESKTOP
zmienna.Metoda nr 2 - wmctrl
Istnieje również ta metoda, która wykorzystuje
wmctrl
.Referencje
źródło
$GDMSESSION
denerwuje mnie, ponieważ prawdopodobnie jest nastawiony tylko na DE, które używają DE opartego na GDM lub GNOME. GDM = Menedżer wyświetlania GNOME.DESKTOP_SESSION
na Xfce .default
(mint 15)default
. Domyślna instalacja GNOME 3.$DESKTOP_SESSION
pokazujedefault
dla KDE pod Fedorą 20.Możesz użyć tego skryptu bash . Może wykryć nazwę i wersję środowiska pulpitu.
źródło
ps -e | grep -E '^.* xfce4-session$' > /dev/null
(($? == 0)) && ...
GNOME Shell 3.26.2
dostałamUNKNOWN
. Nie mam wyjścia zgnome-session --version
pracy dla mnie, tognome-shell --version | awk '{print $3}'
też nie wyciągnąłem niczegops -e | grep -E '^.* gnome-session$'
. Wydaje się, że dzieje się tak z powodu-b
końcagnome-session-b
. Usuwanie$
prac lub po prostups -e | grep 'gnome-session'
. Po tych zmianach skrypt działa. DostajęGNOME 3.26.2
To prawdopodobnie zależy od sytuacji. Jeśli wiesz, który menedżer wyświetlania jest używany, być może ten umieszcza te informacje w zmiennej środowiskowej.
Jeśli tak nie jest, myślę, że musisz sprawdzić każdy DE, który chcesz móc zidentyfikować. Wszyscy powinni wprowadzić własne zmienne środowiskowe.
źródło
echo ${DESKTOP_SESSION:0:1}
to by się udało? O ile mogłem przetestować, zwracau
dla Unity ix
dla XFCE. Mam nadzieję, że niektórzy ludzie dołączą do KDE i innych komputerów stacjonarnych.echo ${DESKTOP_SESSION} kde-plasma-safe
dla mojego KDE. Dlaczego „bezpieczny” ...Jeśli zmienna środowiskowa
XDG_CURRENT_DESKTOP
jest dostępna, powinna ci to powiedzieć.źródło
Możesz poszukać uruchomionych
Xorg
procesów. Rodzicem tego powinien być Twój menedżer wyświetlania. Jego potomkowie powinni wskazać, jakie środowisko pulpitu działa. W moim systemie menedżer wyświetlania wykonuje się sam (z różnymi parametrami). To następnie spawnujex-session-manager
które jest dowiązane symboliczniexfce4-session
. To może wystarczyć, ale wszystkie jej dzieci są powiązane z moim środowiskiem graficznym. Znalezienie ich za pomocą drzewa procesów powinno być najlepszym sposobem na wykluczenie elementów innych systemów okien uruchomionych przez różne programy (lub być może celowo).Moją pierwszą myślą było to, że najlepiej byłoby poszukać menedżera okien powiązanego ze środowiskiem pulpitu, ale często można skonfigurować inny do uruchamiania (np.
xmonad
W Gnome), więc nie jest to niezawodne. Najlepiej jest szukać tego, który zarządza rzeczywistym pulpitem, npxfdesktop
Dowolnym elementem środowiska pulpitu, którego faktycznie potrzebujesz, aby skrypt działał :)Przykład
Oto przykład użycia procps-ng (
-C
i--ppid
nie są POSIX). Zakłada, że jest to tylko jeden przypadekXorg
.To tylko przykład, który działa na pulpicie Xfce. Pełny działający przykład wymaga zbadania procesów używanych przez każdy system stacjonarny, podobnie jak większość innych rozwiązań wymaga zbadania, w jaki sposób zmienne środowiskowe są ustawiane w różnych innych systemach stacjonarnych.
źródło
unknown
na Ubuntu.another_desktop
wynik.Z całego eksperymentu opisanego w licznych komentarzach uważam, że moim obowiązkiem jako OP jest wypracowanie konsensusu. (Zapewniam, chętnie przejrzę tę odpowiedź, jeśli dostępne będą kontrastujące dane).
Na razie wydaje się, że najlepiej jest przejąć inicjatywę od
$XDG_CURRENT_DESKTOP
momentu zdefiniowania tej zmiennej. Jeśli nie,$XDG_DATA_DIRS
może podać żądane informacje, bardziej niż pierwszą literę${DESKTOP_SESSION:0:1}
.źródło
XDG_CURRENT_DESKTOP
. Myślę, że głównym problemem z tymi zmiennymi są zmienne, ponieważ są one ustawiane przez menedżera wyświetlania, a nie środowisko pulpitu, a więc występuje pewna niespójność. Kiedy wybieram domyślną sesję (xfce) z lightdmecho $DESKTOP_SESSION
daje,lightdm-xsession
co jest połączeniemlightdm
ix-session-manager
, proces użyty do uruchomienia mojego pulpitu (symlinkowanyxfce4-session
). Wyobrażam sobie, że instalacja z inną domyślną sesją po prostu użyje innego dowiązania symbolicznego i da to samoDESKTOP_SESSION
DESKTOP_SESSION
faktycznie powiemxfce
lubgnome
Działa to zarówno z Ubuntu 18.10 (kosmiczny) [typ lxqt], jak i Mint 19 (tara) [typ cynamonu]:
Przechwyć wynik do zmiennej i wykonaj dalszy niezbędny kod za pomocą zdolnej logiki analitycznej (case stmt, if / then), która obejmuje dowolne / wszystkie rozpoznane typy stamtąd; i / lub działają z wdziękiem, gdy używane są nierozpoznane typy.
źródło