nome do binário vs. nome na GUI

1

Eu gostaria de poder intitular isso melhor. Um exemplo parece ser a melhor maneira de explicar: Em icedove > preferences > attachments, para 'JEPG image' pode-se selecionar 'Image Viewer' ou 'Use other ...'. Acontece que 'Image Viewer' é realmente '/ usr / bin / eog' no meu sistema. Eu só sei disso porque depois de abrir o eog na linha de comando, clicando em 'Ajuda > Sobre', eu vejo o "Visualizador de imagens" ... "O visualizador de imagens do GNOME". Ele não dá nenhuma idéia do que é o binário real, então, quando o programa é aberto 'via', é o nome 'Image Viewer' no icedove, como diabos você descobriria qual é o binário real? Existe alguma tabela em algum lugar, ou alguma lista de associações ou algo assim? O acima é apenas um exemplo - este problema existe em todas as GUIs o tempo todo. É um triste exemplo do Linux se esforçar para ser tão estúpido e inútil quanto o Windows: - (

    
por Ray Andrews 10.02.2015 / 22:58

2 respostas

0

No mundo Unix com o Sistema X Window (X11) there's, não há conceito de “aplicativo”. Existem vários conceitos que se sobrepõem, mas não correspondem exatamente:

  • packages - o nome que você seleciona em um gerenciador de pacotes para instalar o aplicativo. Se você não instalá-lo através de um gerenciador de pacotes, pode não haver um nome de pacote formal. Um pacote pode incluir vários aplicativos.
  • executáveis - o arquivo que é executado para executar o aplicativo. Os executáveis têm um nome de arquivo, que pode ou não ser informativo (é quando o caminho para o aplicativo é /usr/bin/foo , não quando é /opt/myapp/bin/run ou /home/alice/work/dev/a.out ).
  • processes - a instância da aplicação na memória. Executar um executável cria um processo. Exatamente o que pode ser considerado um nome de processo é complexo e um pouco dependente do sistema, não vou discuti-lo completamente aqui. Na maioria dos casos, você pode considerar o nome do processo como o nome do arquivo do executável.
  • toplevel windows - um programa GUI, por definição de “GUI”, cria pelo menos um deles. Uma janela tem várias coisas que cuidam de nomes de algum tipo, todos os quais podem ser recuperados como propriedades e têm um pouco enganoso nomes:

    • WM_NAME é de fato o título da janela. É o que os gerenciadores de janelas exibem na barra de título e nas listas de tarefas. Ele é feito para ser legível e freqüentemente muda durante a vida útil da janela (por exemplo, ao abrir um arquivo diferente, alternar para outra guia, etc.).
    • WM_ICON_NAME é semelhante a WM_NAME , mas é usado ao mostrar um ícone representando uma janela.
    • WM_CLASS é um par de nomes, o nome da instância e o nome da classe. Esses nomes são usados por mecanismos de configuração, como X resources ; consulte "Xterm" ou "xterm" no arquivo de configuração para uma breve introdução. Esses nomes são normalmente os mesmos por padrão, exceto que a classe é capitalizada e a instância não é. Eu acho que o nome da classe é o melhor candidato para "nome do aplicativo" - mas um programa pode exibir várias janelas de nível superior com classes diferentes.
  • Um aplicativo pode ter um menu com um item chamado "Sobre", que exibe uma janela contendo um nome. O que ele coloca lá é puramente a escolha do desenvolvedor do aplicativo.

Processe visualizadores, não apenas baseados em texto como ps , top e htop , mas também a maioria dos GUIs, como gnome-system-properties e lxtask, exiba apenas informações sobre processos, não sobre janelas de nível superior .

Há uma razão técnica para isso: não há uma maneira robusta de identificar qual processo exibe qual janela. É possível, mas muito incomum, ter vários processos desenhando na mesma janela. Mais comumente, pode não haver processo exibindo uma janela, porque o X11 é transparente à rede - um aplicativo pode enviar instruções para a interface de exibição (o servidor X) pela rede. Não há mecanismo infalível para rastrear janelas criadas por conexões remotas.

Se o aplicativo for cooperativo (e a maioria é), duas propriedades de janela permitem rastrear a janela para um processo:

  • _NET_WM_PID : o ID do processo que criou a janela.
  • WM_CLIENT_MACHINE : o nome do host da máquina em que o processo é executado.

Veja Qual processo criou essa janela do X11? para obter mais detalhes . Você pode consultar a propriedade _NEW_WM_PID com ferramentas de linha de comando, como xprop , xdotool , wmctrl , etc. Com xprop , você pode exibir todas as propriedades. Com xdotool e xprop , clique em uma janela para exibir informações sobre ela. wmctrl pode listar informações sobre todas as janelas.

xprop _NET_WM_PID WM_CLIENT_MACHINE  # and click on a window
xdotool selectwindow getwindowpid    # and click on a window
wmctrl -lp

Dado o ID do processo, você pode obter informações sobre o processo, como o caminho para seu executável. Por exemplo, execute o seguinte comando e clique em uma janela para exibir informações sobre o aplicativo que exibe a janela.

ps -o args= -p $(xdotool selectwindow getwindowpid)

Para ver o caminho para o executável, no Linux:

readlink /proc/$(xdotool selectwindow getwindowpid)/exe

¹ Existem projetos como o Wayland e o Mir que se esforçam para substituir o X11, mas considerando quantos aplicativos existem para o X11, eles estão avançando lentamente e só são viáveis se eles mantêm compatibilidade suficiente.

    
por 23.07.2015 / 19:43
0

Se você gosta de ver um caminho completo para o arquivo de execução binária, basta executar no terminal

which programm_name

A lista de associações gerais que você pode encontrar em $HOME/.local/share/applications/mimeapps.list

    
por 10.02.2015 / 23:19