Intereting Posts
Что такое хорошее приложение X, которое я могу использовать для тестирования X-сервера на Solaris? как показать только процессы * не * сопоставление фильтра? Как конвертировать POSIX в файл часового пояса Olson? Стандартный и переносимый способ отправки электронной почты с консоли? Ограничить процесс доступа только к определенному каталогу Поиск инструмента тегирования командной строки для mp3 и ogg, поддерживающего изображения Как отсортировать список файлов по времени, учитывая только имена файлов Место Grub – это было сделано в mbr или в другом месте? Где я могу найти исходный код libgio? Slow NFS, nfsstat -c: что такое поле authrefrsh (aka newcreds?) В деталях? Awk удалить поле, только если числовое Как найти первый гласный в строке Arch Linux – Подкачка / загрузка Можно ли использовать команду at для планирования задания, которое должно выполняться с заданной меткой времени? Как вести историю команд с временными отметками, выводимыми на терминал непрерывно?

список графических процессов из терминала

Не путайте здесь вопрос о том, как графически отображать процессы, это не то, о чем я прошу.

В терминале, как я могу видеть, какие процессы имеют графический интерфейс? как в таких вещах, как firefox, vlc, geany, nautilus и т. д. … у всех есть gui. Я хотел бы получить дополнительную информацию о том, какие процессы используют ресурсы диспетчера окон, и я хотел бы сделать это с терминала.

Как получить дополнительную информацию о тех типах процессов?

Я пытался использовать команду ps , но я хотел бы использовать любую команду терминала, чтобы помочь мне решить эту проблему.

UPDATE: я вижу что-то, что мне нравится в pstree которое является деревом, из которого весь интересующий меня графический процесс pstree :


 $ pstree
 init─┬─
      │
      ├─lightdm─┬─Xorg
      │ ├─lightdm─┬─init─┬─
      │ │ │ ├─firefox───55 * [{firefox}]
      │ │ │ ├─geany─┬─bash
      │ │ │ │       
      │ │ │ ├─gnome-terminal─┬─bash───pstree


Попробуйте xrestop или xrestop -b .

Он предназначен для измерения количества X ресурсов, каждый из которых использует X-окно, но в качестве небольшого бонуса идентифицирует имя окон и соответствующих PID.

xlsclients близок (и стандартная часть X), он перечисляет клиенты X-сервера. Но не может быть сопоставления 1: 1 между тем, что вы считаете «приложением», и тем, что X считает «клиентом». Мой одиночный экземпляр LyX потребляет 13 клиентов, например, если я использую xlsclients -l (long-form output), я вижу, что только один из них имеет определенное «Имя значка», но это всего лишь намек. Кроме того, поскольку он использует XQueryTree() он может пропустить некоторые окна (он не находит никаких открытых окон xpdf ).

Он также не дает очень много информации, что вы можете сделать, хотя использует xlsclients -l для получения идентификатора окна и запрашивает каждое окно с помощью xprop -id $ID . Для получения дополнительной информации о окне используйте xwinifo , хотя он заботится о «окнах», которые не то же самое, что клиенты или приложения:

 xwininfo -root -children xwininfo -root -tree # indented view 

В зависимости от вашего оконного менеджера вы можете проверить некоторые свойства окна (например, свойства _NET_xxx или _NET_WM_xxxx ), чтобы определить, является ли что-то «приложением». Если клиент оконного менеджера или графическая библиотека устанавливает его (любой современный), свойство _NET_WM_PID является самым простым ( хотя и несовершенным ) способом связывания PID с определенным окном. Я не знаю инструмента, который связывает все эти части вместе.

Я использую оконный менеджер FVWM, я могу напрямую поговорить с ним, используя FvwmCommand , например, FvwmCommand -i1 send_windowlist показывает мне список окон. Предложение wmctrl использовать wmctrl кажется хорошим и оконным менеджером агностическим способом сделать то же самое.

Еще один трюк состоит в том, чтобы запросить _WIN_CLIENT_LIST корневого окна, через bash :

 $ xwininfo -root xwininfo: Window id: 0x69 (the root window) (has no name) [..] $ IFS=",= " read -a win < <(xprop -notype -id 0x69 32x _WIN_CLIENT_LIST ) $ for ((ww=1; ww<${#win[*]}; ww++)); do printf "%i %s\n" $ww ${win[$ww]}; xprop -id ${win[ww]} -notype _NET_WM_PID WM_NAME WM_CLASS \ WM_ICON_NAME WM_CLIENT_LEADER; done 

Это точно соответствует тем, что мои WM-списки являются окнами (без тех, которые я настроил для исключения из списка окон WM). Окна для детей устанавливают WM_CLIENT_LEADER своим родителям (для управления сеансом ), хотя родительское окно может быть не видимым (firefox делает это) и может указывать на себя.

xrestop получает мой голос, хотя.

Кроме того, если вы используете оконный менеджер, совместимый с EWMH, вы можете попробовать wmctrl . Он может windows being managed by the window manager все windows being managed by the window manager + их PID:

 $ wmctrl -lp | awk '{ print $3 }' | sort | uniq 15672 19685 19925 26247 6884 

Да, для этого вам нужен X. Но я не знаю инструмента, который делает это из коробки.

Приложение с графическим интерфейсом – это клиент на локальном X-сервере. Но клиент на локальном сервере X не обязательно является приложением с графическим интерфейсом. Кроме того, клиент на локальном сервере X не обязательно является локальным процессом, и локальный процесс с графическим интерфейсом может быть клиентом на удаленном X-сервере.

Я думаю, вы приблизитесь к xlsclients или xlsclients -a . С опцией -l он также даст вам (помимо прочего) идентификатор окна. Но он не может дать вам PID. X вообще не знает об этом.

Размышление: с доступом root вы можете выполнить grep через вывод lsof чтобы увидеть, какие (локальные!) Процессы получают доступ к (локальным!) X-серверам. Так что, возможно, есть какой-то инструмент, который уже делает это? Я не знаю.