Xdotool: O que são "Classe" e "ClasseName" para uma janela? -- xorg campo com xdotool camp askubuntu Relacionado O problema

xdotool: what are “class” and “classname” for a window?


15
vote

problema

português

à luz de https://unix.stackexchange.com/a/254854/674 e https: // unix.stackexchange.com/questions/458895/How-can-i-bring-A-background-gui-job-to-the-font-to-my-desktop , há um exemplo de manpage de xdotool

  # Activate google-chrome when you move the mouse to the bottom-left corner:  xdotool behave_screen_edge bottom-left search --class google-chrome windowactivate    

A manpage diz

.

- correspondência de classe contra a classe da janela.

- CLASSNAME Correspondência no nome da janela.

O que são "Classe" e "Classname"?

Quais valores possíveis eles têm?

Como posso descobrir a classe e a nome da classe de uma janela?

obrigado.

english

In light of https://unix.stackexchange.com/a/254854/674 and https://unix.stackexchange.com/questions/458895/how-can-i-bring-a-background-gui-job-to-the-front-of-my-desktop, there is an example from manpage of xdotool

# Activate google-chrome when you move the mouse to the bottom-left corner:  xdotool behave_screen_edge bottom-left search --class google-chrome windowactivate 

The manpage says

--class Match against the window class.

--classname Match against the window classname.

What are "class" and "classname"?

What possible values do they have?

How can I find out the class and classname of a window?

Thanks.

     

Lista de respostas

14
 
vote
vote
Melhor resposta
 

sob x11 windows tem xwindowdattributes estrutura e XClasshint Estruturas Propriedades de quais aplicativos Obtenha informações sobre o Windows. Especificamente, o último é responsável pelo ABCDEFGHIJKLMNABCDEFGHIJKLMN0 Propriedade, duas strings separadas por vírgulas, que podem ser vistas facilmente via abcdefghijklmnabcdefgijklmn1 comando. Por exemplo, o Chrome tem

  WM_CLASS(STRING) = "google-chrome", "Google-chrome"    

Estes dois são documentado como:

.
  • Uma string que nomes a instância específica do aplicativo para a qual o cliente que possui esta janela pertence. ...
  • Uma string que nomeia a classe geral de aplicativos à qual o cliente que possui esta janela pertence. Recursos que são especificados por Classe Aplicar a todas as aplicações que têm o mesmo nome de classe ....

Assim, por exemplo, extensão de hangouts para o Chrome, tem o mesmo nome de classe, mas diferente nome da instância:

  $ xprop | grep 'CLASS' WM_CLASS(STRING) = "crx_nckgahadagoaajjgafhacjanaoiihapd", "Google-chrome"    

Isso permite ferramentas como xdotool Pesquise todas as janelas do tipo de aplicativo específico ou da instância específica da janela. Por exemplo, isso também pode ser propriedade útil para algo parecido com docas que agrupar janelas sob o mesmo ícone de um aplicativo.

Em particular para xdotool , classname corresponde à primeira string, e class corresponde à segunda string. No meu exemplo com aplicativos Chrome e Hangouts:

  $ xdotool search -classname crx_nckgahadagoaajjgafhacjanaoiihapd 96469129  $ xdotool search -class Google-chrome 96469069 109051905 109051907 96468993 96469129 109051912 109051924    

Isso também pode ser aparente de olhar para o código-fonte. Vamos nos concentrar no nome da classe, por exemplo. No cmd_search.c Nós temos uma estrutura de pesquisa construída, que tem uma propriedade de máscara de pesquisa (linhas 171 a 173).

Isso é passado para xdo_search_windows Função definida em xDO_Search.c , que por sua vez chama abcdefghijklmn10 , isso, por sua vez, vai para _xdo_match_window_className , que finalmente acaba, Recuperando ambas as estruturas mencionadas no Início desta resposta com o padrão xlib funções xgetwindowattributes e xgetclasshint .


Nota do lado: aplicativos gtk aparentemente sempre crie uma pequena janela pai com uma janela de criança , o que significa que você pode ficar confuso Resultados ao pesquisar uma janela específica.

 

Under X11 windows have XWindowdAttributes structure and XClassHint structures properties from which applications get information about windows. Specifically the last one is responsible for the WM_CLASS property, two comma-separated strings, which can be seen easily via xprop command. For instance, Chrome has

WM_CLASS(STRING) = "google-chrome", "Google-chrome" 

These two are documented as:

  • A string that names the particular instance of the application to which the client that owns this window belongs. ...
  • A string that names the general class of applications to which the client that owns this window belongs. Resources that are specified by class apply to all applications that have the same class name....

Thus, for example Hangouts extension for Chrome, has same class name, but different instance name:

$ xprop | grep 'CLASS' WM_CLASS(STRING) = "crx_nckgahadagoaajjgafhacjanaoiihapd", "Google-chrome" 

This allows tools such as xdotool search all windows of particular application type, or specific window instance. For instance, this also can be useful property for something like docks that group windows under the same icon of an application.

In particular for xdotool, classname corresponds with the first string, and class corresponds the second string. In my example with Chrome and Hangouts apps:

$ xdotool search -classname crx_nckgahadagoaajjgafhacjanaoiihapd 96469129  $ xdotool search -class Google-chrome 96469069 109051905 109051907 96468993 96469129 109051912 109051924 

This also can be apparent from looking at the source code. Let's focus on classname for example. In the cmd_search.c we have a search struct built up, which has a search mask property(lines 171 to 173).

This gets passed to xdo_search_windows function defined in xdo_search.c , which in turn calls check_window_match, that in turn goes to _xdo_match_window_classname, which finally ends up retrieving both structures mentioned in the beginning of this answer with the standard Xlib functions XGetWindowAttributes and XGetClassHint.


Side note: Gtk apps apparently always create a small parent window with a child window, which means you may get confusing results when searching for a specific window.

 
 
     
     
5
 
vote

um class seria que, como urxvt , que realmente contém ambos abcdefghijklmn2 e abcdefghijklmnabcdefgijklmn3 Qual é o Unicode RXVT terminal. O ABCDEFGHIJKLMNABCDEFGHIJKLMN4 Breaks para os nomes reais. Eu mostrarei um exemplo abaixo.

Eu tenho 4 janelas do terminal RXVT aberto.

  terrance-Linux:~$ xdotool search -class rxvt 130023435 127926283 125829131 132120587  terrance-Linux:~$ xdotool search -class urxvt 130023435 127926283 125829131 132120587  terrance-Linux:~$ xdotool search -classname urxvt  terrance-Linux:~$ xdotool search -classname rxvt 130023435 127926283 125829131 132120587    

Então, quando lancei um urxvt terminal, é isso que recebi.

  terrance-Linux:~$ xdotool search -classname urxvt 140509193    
urxvt0 e o segundo é o urxvt1 .

Exemplo:

Executando o comando e clicando em uma janela de terminal RXVT:

  urxvt2   

Mesmo comando, clicando em uma janela Urxvt:

  urxvt3   

Mesmo comando novamente clicando em um navegador do Google Chrome:

  urxvt4   

clicando em um urxvt5 janela:

  urxvt6   

Clicando em um ABCDEFGHIJKLMNABCDEFGHIJKLMN17 Janela:

  urxvt8   

Clicando em uma janela do Firefox (que é diferente):

  urxvt9   

Espero que isso ajude a espalhar alguma luz sobre as diferenças.

 

A class would be that like urxvt which actually contains both urxvt and rxvt which is the unicode rxvt terminal. The classname breaks those up into the actual names. I will show an example below.

I have 4 rxvt terminal windows open.

terrance-Linux:~$ xdotool search -class rxvt 130023435 127926283 125829131 132120587  terrance-Linux:~$ xdotool search -class urxvt 130023435 127926283 125829131 132120587  terrance-Linux:~$ xdotool search -classname urxvt  terrance-Linux:~$ xdotool search -classname rxvt 130023435 127926283 125829131 132120587 

Then when I launched a urxvt terminal this is what I got.

terrance-Linux:~$ xdotool search -classname urxvt 140509193 

Using the xprop application we can click on the windows and it will tell us the WM_CLASS(STRING). The first is the classname and the second is the class.

Example:

Running the command and clicking on a RXVT terminal window:

terrance-Linux:~$ xprop | grep WM_CLASS WM_CLASS(STRING) = "rxvt", "URxvt" 

Same command clicking on a URXVT window:

terrance-Linux:~$ xprop | grep WM_CLASS WM_CLASS(STRING) = "urxvt", "URxvt" 

Same command again clicking on a Google Chrome browser:

terrance-Linux:~$ xprop | grep WM_CLASS WM_CLASS(STRING) = "google-chrome", "Google-chrome" 

Clicking on a xfce4-terminal window:

terrance-Linux:~$ xprop | grep WM_CLASS WM_CLASS(STRING) = "xfce4-terminal", "Xfce4-terminal" 

Clicking on a gnome-terminal window:

terrance-Linux:~$ xprop | grep WM_CLASS WM_CLASS(STRING) = "gnome-terminal-server", "Gnome-terminal" 

Clicking on a Firefox window (which is different):

terrance-Linux:~$ xprop | grep WM_CLASS WM_CLASS(STRING) = "Navigator", "Firefox" 

Hope this helps spread some light on the differences.

 
 
   
   

Perguntas relacionadas

0  Por que os personagens que eu digitei falta ou fora de ordem?  ( Why are the characters that i typed missing or out of order ) 
Às vezes, quando uso o Lubuntu 18.04 para digitar minhas perguntas aqui, o editor ecos o que eu digito muito lentamente. Eu sempre acredito que é por causa da...

3  Salvar Web do Firefox por Xdotool  ( Save firefox webpage by xdotool ) 
. Eu quero salvar uma página do Firefox usando Xdotool e renomeie os salvos arquivo para ser test . $ xdotool search "<FirefoxWindowName>" windowactivate...

0  Geometria de janela errada com xdotool  ( Wrong window geometry with xdotool ) 
Eu estou tentando criar um script que usará as informações de geometria atuais de uma janela (superior, esquerda, largura e altura). Eu estou tentando fazer i...

9  Crie um atalho personalizado que digite o conteúdo da área de transferência  ( Create a custom shortcut that types clipboard contents ) 
Eu quero simular a entrada do teclado para que eu possa "colar" meus conteúdos de área de transferência para aplicativos que não permitem (por exemplo, KVM re...

12  Como criar um atalho que executa um comando xdotool para simular uma tecla pressione?  ( How to create a shortcut that executes an xdotool command to simulate a key pres ) 
Estou tentando simular uma tecla de mídia pressione usando um atalho personalizado. Até agora, consegui alcançar a simulação que eu preciso usar o comando: ...

1  Como faço para usar o WMCTRL para detectar se uma janela estiver presente?  ( How do i use wmctrl to detect if a window is present ) 
Eu estou fazendo alguma automação da UI e quero executar alguma tarefa com base na janela estar presente. A janela só abre em mesmas casos. O comando que eu q...

0  XDOOOL - Repetir Keypresses para jogos  ( Xdotool repeat keypresses for gaming ) 
Até agora eu consegui remapear o mouse para a frente e as teclas de trás para os teclas que coincidem com o Keybinds que eu uso para o World of Warcraft. O ...

9  Existe uma maneira de enviar o sinal do Windows sem "Alt-Tab"?  ( Is there a way to send the switch windows signal without alt tab ) 
Estou tentando ligar um botão de janela do interruptor no mouse no Ubuntu. Atualmente estou tentando fazer isso com xbindkeys e xte , mas faça isso em .xb...

4  Xdotool: Janela em movimento "acima" 0 0  ( Xdotool moving window above 0 0 ) 
De acordo com o título. Quando eu faço xdotool getactivewindow windowmove 0 0 windowsize 1200 $height_first_monitor xdotool Mova a janela. Mas quando e...

0  Emissão de desktop Xdotool  ( Xdotool desktop issue ) 
Eu sou muito novo para isso, então espero não ofender. Estou tentando criar ícones desktop.desktop para o meu HTPC (PC Home Theater). Cada ícone, uma vez pres...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.