Определение графической оболочки рабочего стола (KDE, Unity, Gnome)

Модератор: Модераторы разделов

Аватара пользователя
ReSeR
Сообщения: 383
ОС: GNU Debian

Определение графической оболочки рабочего стола

Сообщение ReSeR »

Есть некий стартаповый скрипт, который выполняет задание и пользуется штатными нотифиерами (notify-send, kdialog) для уведомления о проделанном.
Так вот, каким образом определить скрипту в какой графической оболочке работает пользователь?
Бэкап - акт проявления трусости.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21455
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Определение графической оболочки рабочего стола

Сообщение Bizdelnick »

А зачем? Есть notify-send - используйте его. Он во всех DE должен работать. Нет его - проверяйте, что есть.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ReSeR
Сообщения: 383
ОС: GNU Debian

Re: Определение графической оболочки рабочего стола

Сообщение ReSeR »

Да, но с KDE он ведь не идёт по умолчанию, по крайней мере в Kubuntu 13.04.
Та и вообще, на будущее.
Бэкап - акт проявления трусости.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21455
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Определение графической оболочки рабочего стола

Сообщение Bizdelnick »

Я и говорю - проверяйте его наличие

Код: Выделить всё

if which notify-send > /dev/null ; then
    notify-send blabla
elif which kdialog > /dev/null ; then
    kdialog blabla
fi
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ism
Сообщения: 1261
Статус: Никто, по сути быдло

Re: Определение графической оболочки рабочего стола

Сообщение Ism »

У меня целая тема была, вот результат
Костыль, но почти работает. На тот момент был не доделан, надо проверять.
Выдает имя DE

Код: Выделить всё

#/bin/sh

detectDE()
{
    # see https://bugs.freedesktop.org/show_bug.cgi?id=34164
    unset GREP_OPTIONS

    if [ -n "${XDG_CURRENT_DESKTOP}" ]; then
      case "${XDG_CURRENT_DESKTOP}" in
         GNOME)
           DE=gnome;
           ;;
         KDE)
           DE=kde;
           ;;
         LXDE)
           DE=lxde;
           ;;
         XFCE)
           DE=xfce
           ;;
         Unity|UNITY|unity)
           DE=unity;
           ;;
      esac
    fi

    if [ x"$DE" = x"" ]; then
      # classic fallbacks
      if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
      elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
      elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1` ; then DE=gnome;
      elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
      elif xprop -root 2> /dev/null | grep -i '^xfce_desktop_window' >/dev/null 2>&1; then DE=xfce
      fi
    fi

    if [ x"$DE" = x"" ]; then
      # fallback to checking $DESKTOP_SESSION
      case "$DESKTOP_SESSION" in
         gnome)
           DE=gnome;
           ;;
         LXDE)
           DE=lxde;
           ;;
         xfce|xfce4)
           DE=xfce;
           ;;
      esac
    fi

    if [ x"$DE" = x"" ]; then

      # fallback to uname output for other platforms
      case "$(uname 2>/dev/null)" in
        Darwin)
          DE=darwin;
          ;;
      esac
    fi

    if [ x"$DE" = x"gnome" ]; then
      # gnome-default-applications-properties is only available in GNOME 2.x
      # but not in GNOME 3.x
      which gnome-default-applications-properties > /dev/null 2>&1  || DE="gnome3"
    fi
    echo $DE
}

detectDE

exit 0
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Определение графической оболочки рабочего стола

Сообщение NickLion »

Если подходит Python, то можно взять последний скрипт отсюда и использовать как-то так: ./notify.py -i firefox Header "Body of the notification". Конечно, при условии, что поддерживается org.freedesktop.Notifications.
Спасибо сказали: