как вывести список окон на активность KDE/Plasma5

Я пытаюсь написать скрипт, который запускает приложение, если оно не запущено, или активирует окно, если оно уже видно в текущей активности.

Используя xdotool или wmctrl, я могу получить список окон и активировать их. Если они не открыты, то я могу их запустить. Но проблема возникает с действиями KDE. Эти инструменты отображают окна всех действий, даже если они не видны в текущем действии.

Я использую различные методы qdbus, но не нахожу ничего близкого.

кто-нибудь создавал такие скрипты? как можно получить видимость окон по отношению к действиям?

Правки: как показано на картинке ниже, я смог увидеть идентификаторы действий, к которым привязано окно. Но я не могу найти способ получить его программно.

введите здесь описание изображения


person Noortheen Raja    schedule 12.07.2020    source источник
comment
Я не могу себе представить, что нет способа сделать это. Я имею в виду, очевидно, диспетчер задач знает об этом, поскольку он может показывать только окна текущей активности, но я слишком плох в C, чтобы понять, могу ли я его использовать (code @ github.com/KDE/plasma-desktop/blob/master/applets/taskmanager /).... Я также надеялся, что проверка dbus с помощью чего-то вроде qdbus org.kde.ActivityManager /ActivityManager/Resources/Linking IsResourceLinkedToActivity :global <PID> :current поможет (см. github.com/alxlg/ff-kactivities/blob/master/ff-kactivities), но нет... Какие-нибудь обновления?   -  person Chris Stenkamp    schedule 15.03.2021


Ответы (1)


Альтернативный подход был предоставлен на форуме kde. Но не совсем ясно, поможет ли это решить вашу проблему.

Рекомендация следующая:

На уровне активности вы можете использовать URI › Отношения активности и запрашивать dbus для дальнейшего написания сценариев. Например:

  1. Свяжите каталог с действием в дельфине.
  2. Добавьте директиву дельфина приложения в средство запуска приложений и запустите пользовательский скрипт для условного запуска экземпляров дельфина.
  3. Установить директиву дельфина в качестве файлового менеджера по умолчанию

Аналогичный рабочий процесс возможен для каждого типа файлов через настройки ассоциации файлов.

Насколько я мог выяснить в результате экспериментов, невозможно связать окна с действиями и запросить отношения через ActivityManager. Я предполагаю, что архитектура multi-screen-workspace-uri-activity-window-rule предназначена для настройки рабочих процессов для решения проблемы более целостным образом. Но, надеюсь, кто-то может дать лучший ответ здесь.

Я написал скрипт регулярное выражение проверяет все дерево шины сеанса на наличие связанных и полезных методов. Вы можете просто использовать его ./query-dbus.py --pattern "^.*activit.*$". Так что ответ в работе.

РЕДАКТИРОВАТЬ: некоторые сервисы имеют метод isMonitorActivity, isOnActivity

"org.kde.konsole": {
    "/Sessions/1": {
      "org.kde.konsole.Session": {
          "method": [
            "setMonitorActivity",
            "isMonitorActivity"
          ]
      }
    }
}
    

"org.kde.kate": {
    "/MainApplication": {
      "org.kde.Kate.Application": {
          "method": [
            "isOnActivity"
          ]
      }
    }
  }
}

Вы уже отправили запрос функции?

person Dominik Kummer    schedule 17.12.2020
comment
на самом деле существует метод dbus ``` org.kde.ActivityManager /ActivityManager/Resources/Linking ``` для прослушивания оконных ссылок на действия. Но мне не удалось успешно завершить свой эксперимент. - person Noortheen Raja; 17.12.2020
comment
Я был тем, кто разместил этот вопрос на форуме :) Я разместил скриншот, который также может быть вам полезен. - person Noortheen Raja; 17.12.2020
comment
К сожалению, мне не хватает 9 баллов репутации, чтобы прокомментировать ваш пост. Так круто! Я также просмотрел упомянутую вами консоль и нашел имя ресурса окна, которое мне нужно для запроса ссылки, вызвав метод ActivityManager/Resource/Linking/isResourceLinkedToActivity. - person Dominik Kummer; 17.12.2020
comment
Пожалуйста, напишите, если вы придумаете сценарий. - person Noortheen Raja; 18.12.2020
comment
Как выглядел ваш эксперимент с /ActivityManager/Resources/Linking? - person Dominik Kummer; 18.12.2020
comment
comment
Кстати, только что измерил гораздо более элегантное решение qdbus для отображения dbus, но неожиданно на моей медленной машине это заняло на 15 секунд больше. спасибо за дополнительный вклад. Вы уже решили свою проблему по-другому? - person Dominik Kummer; 18.12.2020
comment
Я просто перешел к одному виду деятельности за раз. Потребовалось слишком много времени, чтобы найти способ. - person Noortheen Raja; 18.12.2020