Я пишу bash
сценарий, который должен знать, какая среда рабочего стола (XFCE, Unity, KDE, LXDE, Mate, Cinnamon, GNOME2, GNOME3, ...) работает.
Как я могу получить эту информацию?
bash
desktop-environment
bash-script
Серж Строобандт
источник
источник
xplanet
и хотел бы автоматически обновлять фон рабочего стола с помощью команд, специфичных для среды рабочего стола. Если вы хотите опубликовать ответ на эту проблему , перейдите по ссылке.Ответы:
Основная проблема с проверкой
DESKTOP_SESSION
состоит в том, что она задается диспетчером отображения, а не сеансом рабочего стола, и в ней возможны несоответствия. Дляlightdm
Debian значения берутся из имен файлов в/usr/share/xsessions/
.DESKTOP_SESSION
отражает среду рабочего стола, если при входе в систему сделан определенный выбор, однакоlightdm-xsession
всегда используется сеанс по умолчанию.GDMSESSION
это другой вариант, но, похоже, имеет аналогичное положение (это то же значение, что иDESKTOP_SESSION
для меня).XDG_CURRENT_DESKTOP
выглядит как хороший выбор, однако в настоящее время он не соответствует стандарту XDG и поэтому не всегда реализуется. Смотрите здесь для обсуждения этого. Этот ответ показывает его значения для разных дистрибутивов / рабочих столов, я также могу подтвердить, что в настоящее время он недоступен для меня на XFCE.Разумным резервом для
XDG_CURRENT_DESKTOP
несуществующих будет попыткаXDG_DATA_DIRS
. При условии, что файлы данных для среды рабочего стола установлены в каталоге с его именем, этот подход должен работать. Надеемся, что это будет иметь место для всех дистрибутивов / настольных ПК!Следующие (с GNU grep) тесты для XFCE, KDE и Gnome:
POSIX совместимый:
Сочетать с проверкой
XDG_CURRENT_DESKTOP
:источник
apt-file
Это также хороший инструмент, чтобы увидеть, куда устанавливаются различные рабочие столы.XDG_DATA_DIRS
не существует или просто не содержит ничего полезного?||
стиле. Тем не менее, этот вопрос был задан на других сайтах SE, я думаю, что у нас есть лучший набор ответов.Метод № 1 - $ DESKTOP_SESSION
Я думаю, что вы можете узнать, опросив переменную окружения
$DESKTOP_SESSION
. Я не совсем уверен, насколько широко это поддерживается, но в моем ограниченном тестировании это, кажется, доступно в Fedora & Ubuntu.Другой выбор
$XDG_SESSION_DESKTOP
переменная.Метод № 2 - wmctrl
Существует также этот метод, который использует
wmctrl
.Ссылки
источник
$GDMSESSION
заставляет меня нервничать, поскольку, скорее всего, он ориентирован только на DE, которые используют либо GDM, либо DE на основе GNOME. GDM = Диспетчер отображения GNOME.DESKTOP_SESSION
на xfce .default
(мята 15)default
тоже показал это. Установка по умолчанию GNOME 3.$DESKTOP_SESSION
показываетdefault
для KDE под Fedora 20.Вы можете использовать этот скрипт bash . Он может определить имя и версию окружения рабочего стола.
источник
ps -e | grep -E '^.* xfce4-session$' > /dev/null
(($? == 0)) && ...
GNOME Shell 3.26.2
я получилUNKNOWN
. Нет выхода изgnome-session --version
работы для меня,gnome-shell --version | awk '{print $3}'
я тоже не получил ничего изps -e | grep -E '^.* gnome-session$'
. Это, кажется, из-за-b
в концеgnome-session-b
. Удаление$
работ или просто простоps -e | grep 'gnome-session'
. С этими изменениями скрипт работает. Я получаюGNOME 3.26.2
Это, вероятно, зависит от ситуации. Если вы знаете, какой диспетчер отображения используется, возможно, он помещает эту информацию в переменную среды.
Если это не так, то я думаю, что вы должны проверить все DE, которые вы хотите идентифицировать. Все они должны представить свои собственные переменные среды.
источник
echo ${DESKTOP_SESSION:0:1}
будет ли делать трюк? Насколько я мог проверить, он возвращаетсяu
для Unity иx
для XFCE. Надеюсь, некоторые люди присоединятся к KDE и другим рабочим столам.echo ${DESKTOP_SESSION} kde-plasma-safe
для моего KDE. Как бы то ни было "безопасно" ...Если переменная среды
XDG_CURRENT_DESKTOP
доступна, она должна сообщить вам.источник
Вы можете искать запущенные
Xorg
процессы. Родителем этого должен быть ваш менеджер дисплеев. Его потомки должны дать представление о том, какая среда рабочего стола работает. В моей системе диспетчер отображения выполняется сам по себе (с другими параметрами). Это тогда порождает,x-session-manager
который символически связан сxfce4-session
. Этого может быть достаточно, но все дети этого связаны с моей рабочей средой. Нахождение их через дерево процессов должно быть лучшим способом исключения элементов других оконных систем, запускаемых различными программами (или, возможно, намеренно).Сначала я подумал, что было бы лучше искать диспетчер окон, связанный с вашей средой рабочего стола, но часто можно настроить другой (например, другой).
xmonad
в Gnome), чтобы он не был устойчивым. Лучше всего искать, вероятно, тот, который управляет реальным рабочим столом, например,xfdesktop
или любым другим элементом среды рабочего стола, который вам необходим для работы вашего скрипта :)пример
Вот пример использования procps-ng (
-C
и--ppid
не POSIX). Предполагается, что это только один случайXorg
.Это всего лишь пример, который работает для рабочего стола xfce. Полный рабочий пример требует исследования процессов, которые использует каждая настольная система, так же, как большинство других решений требуют исследования того, как переменные среды устанавливаются в различных других настольных системах.
источник
unknown
в Ubuntu.another_desktop
результат.Из всех экспериментов, о которых сообщалось в многочисленных комментариях, я считаю своим долгом, как ФП, выработать согласованный ответ. (Будьте уверены, я был бы рад рассмотреть этот ответ, если контрастные данные станут доступны.)
На данный момент, кажется, лучше взять на себя инициативу,
$XDG_CURRENT_DESKTOP
когда эта переменная определена. Если нет,$XDG_DATA_DIRS
может предоставить необходимую информацию, в большей степени, чем первая буква${DESKTOP_SESSION:0:1}
.источник
XDG_CURRENT_DESKTOP
. Я думаю, что главная проблема с этими переменными в том, что они устанавливаются диспетчером отображения, а не окружением рабочего стола, и поэтому существует некоторая несогласованность. Когда я выбираю сеанс по умолчанию (XFCE) с LightDMecho $DESKTOP_SESSION
дает ,lightdm-xsession
который представляет собой объединениеlightdm
иx-session-manager
, процесс , используемый , чтобы начать свой рабочий стол (слинковано вxfce4-session
). Я предполагаю, что установка с другим сеансом по умолчанию просто использует другую символическую ссылку и выдает то же самоеDESKTOP_SESSION
DESKTOP_SESSION
то на самом деле скажуxfce
илиgnome
Это работает как для Ubuntu 18.10 (космический) [тип lxqt], так и для Mint 19 (тара) [тип корицы]:
Захватите результат в переменную и выполните дальнейший необходимый код с помощью способной аналитической логики (case stmt, if / then), которая включает любые / все распознанные типы оттуда; и / или корректно функционируют, когда используются нераспознанные типы.
источник