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