Qt - как определить, запущено ли приложение в GNOME или KDE? - PullRequest
5 голосов
/ 31 июля 2010

Мне было интересно, как я могу сделать что-то вроде этого ( source ), используя Qt.Я просмотрел документацию, но не смог найти какой-либо способ проверить, запущен ли внешний процесс.

if [ "$(pidof ksmserver)" ]; then
   echo "KDE running."
   # KDE-specific stuff here
elif [ "$(pidof gnome-session)" ]; then
   echo "GNOME running."
   # GNOME-specific stuff here
elif [ "$(pidof xfce-mcs-manage)" ]; then
   echo "Xfce running."
   # Xfce-specific stuff here
fi

Ответы [ 3 ]

5 голосов
/ 19 сентября 2012

Обычно вы не должны этого делать.Как правило, если ваше приложение ведет себя по-разному в зависимости от среды рабочего стола, это будет неприятным сюрпризом для любого пользователя, который переключается между ними.

Альтернатива

Использование команд, не зависящих от DE, таких как xdg-open.Преимущества:

  • Вам не нужно писать логику самостоятельно (xdg-utils уже сделал это)
  • Более удобный для пользователя.Это следует за фактическими предпочтениями пользователя;многие пользователи используют один DE, но предпочитают некоторые приложения из другого DE.
  • Поддерживает другие DE, такие как XFCE, LXDE, Unity и т. д.

Например, вместо открытия URL-адресав Firefox или Konqueror в соответствии с запущенным в настоящий момент DE передайте URL-адрес на xdg-open, чтобы открыть его в предпочтительном приложении пользователя.(Пользователь может быть пользователем Chromium.) Не кодируйте nautilus или dolphin для GNOME и KDE;вместо этого откройте путь, используя xdg-open.

Аналогично, для других форм взаимодействия с DE попробуйте использовать спецификации Freedesktop , вместо того, чтобы пытаться угадать, что DE работает.Существуют стандарты для перемещения файлов в корзину , добавления апплетов в системном трее и добавления файлов в список «Последние файлы», среди прочих.

2 голосов
/ 10 августа 2010

Используйте QProcess для запуска pidof foo, затем проверьте его стандартный вывод?Если это не то, что вы хотите, поиск /proc/.

1 голос
/ 31 июля 2010

Я считаю, что правильный способ сделать то, что делает pidof, это просмотреть записи в / proc.Здесь есть еще один поток: Найти PID процесса по имени без использования popen () или system ()

...