Como encontrar o nome do programa de uma janela X?

1

Eu estava apenas lendo » Como reverter para o GNOME Classic? «. Algumas respostas dizem que você deve pressionar Alt + Win para obter o diálogo Adicionar ao painel . No entanto, o meu teclado não tem Win . Então eu estava me perguntando como iniciar a janela Adicionar ao painel . Geralmente, a melhor maneira é inserir o nome do programa em um terminal. Neste caso, não consigo descobrir o nome.

Eu testei em outro computador e não consegui encontrar o nome na lista de processos. Também xwininfo ou programas similares não deram nenhum nome. Então, qual é a melhor maneira de descobrir o nome do programa que abriu uma janela (X).

    
por qbi 26.11.2012 / 21:48

2 respostas

5

Você pode usar xprop _NET_WM_PID para obter o PID da janela, depois executar ll /proc/<pid>/exe e verificar onde o link está para descobrir qual é o nome do arquivo do programa.

O seguinte é um pequeno script python tirado de um programa em que estou trabalhando:

#! /usr/bin/env python

import os, subprocess

# Function based on code from apport
def get_window_pid():
    xprop = subprocess.Popen(['xprop', '_NET_WM_PID'],
            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    (out, err) = xprop.communicate()
    if xprop.returncode == 0:
        try:
            return int(out.split()[-1])
        except ValueError:
            return -1
    else:
        return -1

def get_window_exe():
    pid = get_window_pid()

    if pid == -1:
        return ''

    return os.path.realpath('/proc/' + str(pid) + '/exe')

if __name__=='__main__':
    exe = get_window_exe()
    if exe == '':
        print 'Unable to identify window\'s executable' 
    else:
        print exe

Salve isso em um arquivo e execute digitando python <filename>.py . Clique na janela e ele irá imprimir o nome do programa.

    
por iBelieve 26.11.2012 / 22:59
1

Com base na resposta da iBelieve:

alias fxname='basename $(ll /proc/$(xprop _NET_WM_PID | awk "{print \$NF}")/exe | awk "{print \$NF}")'

O $NF nos comandos awk deve ter escape para que não seja interpretado como uma variável shell. Assim que você executar, uma retícula aparecerá para você clicar na janela desejada.

    
por user1714965 08.01.2014 / 18:05