Como posso adicionar itens ao menu de sessão do indicador?

1

É possível adicionar ou editar os itens do menu Indicador da Sessão?

Existe uma maneira fácil de fazer isso, ou envolveria recompilar uma compilação personalizada?

Não consigo encontrar muita coisa relacionada a isso on-line.

    
por jaypeagi 15.09.2012 / 14:22

1 resposta

2

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: Como se descobre qual aplicativo está associado a um ícone indicador? .

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 quanto gdbus 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 .

    
por george rowell 17.09.2012 / 05:45