Alguém sabe como pegar o Window Manager (KDE, Gnome…) em que a aplicação está rodando, utilizando o bom e velho C?
Estou usando JNI e precisava dessa informação.
P.S.: Não quero usar nenhuma classe sun.* nem a propriedade sun.desktop.
Alguém sabe como pegar o Window Manager (KDE, Gnome…) em que a aplicação está rodando, utilizando o bom e velho C?
Estou usando JNI e precisava dessa informação.
P.S.: Não quero usar nenhuma classe sun.* nem a propriedade sun.desktop.
Talvez se você tenta-se ler o arquivo ~/.xinitrc ou ~/.xsession, onde ~/ representa o diretório Home do usuário logado.
Nesses arquivos costumam ter linhas como:
exec wmaker
exec gnome-session
talvez algumas propriedade do System.getProperties ? mas usar essas informacoes nunca eh mto legal.
[quote=denisbr]Talvez se você tenta-se ler o arquivo ~/.xinitrc ou ~/.xsession, onde ~/ representa o diretório Home do usuário logado.
Nesses arquivos costumam ter linhas como:
exec wmaker
exec gnome-session
[/quote]
O problema é que muita gente usa mais de um Window Manager. Eu preciso saber qual o cara está rodando no momento.
P/ piorar, pode ocorrer de uma pessoa estar usando mais de um Window Manager ao mesmo tempo, em sessões diferentes. Eu preciso saber qual o cara está usando na mesma sessão da aplicação Java.
[quote=Paulo Silveira]talvez algumas propriedade do System.getProperties ? mas usar essas informacoes nunca eh mto legal.
[/quote]
Justamente, há a propriedade sun.desktop, mas há o problema: tudo que é sun.* não é garantido de continuar funcionando em novas versões, nem de existir em JVMs de outros fornecedores.
por que da necessidade de pegar o WM atual?
pois já que na verdade quem faz o ambiente grafico é o X :shock: , pois idependente do WM não haverá incopatibilidade, desde que a JVM não for a especificada pelo seu projeto.
Espero ter ajudado
Sem usar o System.properties eu só vejo uma maneira rápida:
ps -ef| grep gnome-session | wc -l
Se o resultado disso for > 0, o gnome está no ar ( o que não significa que só o gnome está no ar, o usuário pode estar usando ele junto com o Window Maker).
ps -ef| grep kdeinit | wc -l
Se o resultado disso for > 0, o KDE está no ar.
Se você quer fazer uma gambi um pouco menor, tente conectar na porta do DCOP.
Só p/ constar se mais alguém precisar no futuro:
Para saber se o Gnome está rodando, pode-se checar a variável de ambiente GNOME_DESKTOP_SESSION_ID, se o Gnome estiver ativo, seu valor será true. O mesmo vale para o KDE, a partir da versão 3.2, e a variável KDE_FULL_SESSION.
Achei também a função da GTK+: gdk_x11_screen_get_window_manager_name, que retorna o nome, mas não testei. Também achei referências a mais duas variáveis de ambiente, que não funcionaram em meu ambiente: WINDOWMANAGER e SESSION_MANAGER.