algumas referências:
- jimi312 / Menu da barra de título / fonte - Bitbucket:
- Programando com o DBus usando o PyQt
- Unity / QA / StateIntrospection - Wiki do Ubuntu: especialmente código de exemplo
No momento, a consulta passiva pode extrair informações, como mostrado neste post:
Eu também estou explorando a resposta a essa pergunta, pois ela se relaciona com o DBus, para usar uma interface de nível mais alto possível para evitar a programação de baixo nível. O objetivo final é criar um utilitário que identifique minimamente os aplicativos host dos indicadores e os sub-aplicativos de seus menus componentes. No máximo, permitiria modificações nos menus, como o menu session-indicator
, incluindo o menu de nível superior, ou seja. o indicador de ícone do próprio painel da unidade.
Seria bom saber quais métodos modificadores (se houver algum!) existem no ambiente DBus para modificar o DBus, portanto, o indicator panel
e seus componentes, como Session Indicator
, podem ser modificados conforme necessário.
Os comandos a seguir revelam os métodos de interface para manipular as informações de session indicator
, mas infelizmente os parâmetros usados nesses métodos não são descritos aqui - a referência acima fornece links para os documentos que descrevem a interface de indicador geral - mas específicos para o session indicator
ainda são necessários.
A saída de
qdbus --session com.canonical.indicator.session
implica a existência de interfaces de menu como os itens abaixo:
/
/ org
/ org / ayatana
/ org / ayatana / indicator
/ org / ayatana / indicador / serviço
/ com
/ com / canonico
/ com / canonical / indicator
/ com / canonical / indicator / users
/ com / canonical / indicador / users / menu
/ com / canonical / indicator / session
/ com / canonical / indicator / session / service
/ com / canonical / indicador / sessão / menu
As interfaces podem ser examinadas com:
gdbus introspect --session --dest com.canonical.indicator.session \
--object-path /com/canonical/indicator/users/menu --recurse
e
gdbus introspect --session --dest com.canonical.indicator.session \
--object-path /com/canonical/indicator/session/menu --recurse
Observe a referência interna a interface com.canonical.dbusmenu
.
Para um uso real e abrangente de dump:
gdbus introspect --session --dest com.canonical.indicator.session --object-path / --recurse
Várias subpacotes estão vinculadas ao menu suspenso session indicator
, mas o que não está claro é se esses métodos de interface apenas transferem dados para os aplicativos de submenu associados ou se, de fato, há um canal de comunicação para o indicador de sessão aplicativo em si, para que seu menu possa ser "metodizado".
Além disso,
qdbus --literal --session com.canonical.AppMenu.Registrar \
/com/canonical/AppMenu/Registrar \
com.canonical.AppMenu.Registrar.GetMenus \
| sed -e 's/], \[/],\n[/g' | sort -k 4 -V
fornece uma lista de associações de menu de interface (há menus
para as janelas e também para os indicadores como session indicator
, que na lista abaixo ainda precisa ser determinada)
[Argument: (uso) 25167301, ":1.22", [ObjectPath: /com/canonical/menu/18005C5]],
[Argument: (uso) 25165828, ":1.22", [ObjectPath: /com/canonical/menu/1800004]],
[Argument: (uso) 48234500, ":1.81", [ObjectPath: /com/canonical/menu/2E00004]],
[Argument: (uso) 55244411, ":1.114", [ObjectPath: /com/canonical/menu/34AF67B]],
[Argument: (uso) 55370996, ":1.114", [ObjectPath: /com/canonical/menu/34CE4F4]],
...
[Argument: (uso) 65083174, ":1.275", [ObjectPath: /com/canonical/menu/3E11726]],
[Argument: (uso) 65085474, ":1.275", [ObjectPath: /com/canonical/menu/3E12022]],
Examinando
qdbus --session com.canonical.AppMenu.Registrar /com/canonical/AppMenu/Registrar
pode ser que esses métodos sejam úteis:
method void org.freedesktop.DBus.Properties.Set(QString interface_name, QString property_name, QDBusVariant value
method void com.canonical.AppMenu.Registrar.RegisterWindow(uint windowId, QDBusObjectPath menuObjectPath)
method void com.canonical.AppMenu.Registrar.UnregisterWindow(uint windowId)
Observe o parâmetro identificado como menuObjectPath
. Esses nomes de métodos são qualificados
com {un}RegisterWindow
, então os métodos talvez sejam irrelevantes para os menus indicadores.
Uma vez identificados os métodos corretos com seus parâmetros, é mais fácil usar qdbus
(não é possível usar os parâmetros QVariant) ou D-Feet
do que gdbus
para invocar os métodos.
Basicamente qdbus
e gdbus
são funcionalmente iguais e usam parâmetros idênticos, exceto:
-
qdbus
não identifica os componentes separados com--dest, --object-path, --method, ...
, mas requer que os atributos correspondentes sejam fornecidos na ordem exata -
gdbus
chamadas de método manipulam mais tipos de parâmetro -
qdbus
não é tão exaustivo quantogdbus
especialmente w /--recurse
-
qdbus
pode rapidamente extrair sua sequência de parâmetros de comando através de um clique duplo ou triplo de sua saída com um clique do meio para concatená-lo ao final do comando
A resposta
Como alguém descobre qual aplicativo está associado a um ícone de indicador?
no post mencionado acima descreve como usar qdbus
como uma técnica conveniente para compor os scripts.
A manpage man gdbus
(ou gdbus:
) tem uma exposição melhor do que man qdbus
mas considere D-Feet
.