Почему «pgrep firefox» не работает в Ubuntu 20.04

Я уже сделал это для Debian 9. Для получения дополнительной информации просто откройте ссылку на мой блог .

Для сенсорного экрана мы можем использовать драйвер libinput или evdev . Libinput заменяет драйвер evdev. Приведенная ниже конфигурация создана для evdev .

Получить информацию о xserver -xorg -input .В результате не должно быть файла конфигурации evdev .

dpkg -l | grep xserver-xorg-input

Теперь установите драйвер evdev.

apt-get install xserver-xorg-input-evdev

Проверить, установлен ли драйвер evdev

dpkg -l | grep xserver-xorg-input

Проверьте, находятся ли файлы конфигурации в каталоге /usr/share/X11/xorg.conf.d .

cd /usr/share/X11/xorg.conf.d
ls

Результат:

10-amdgpu.conf 10-evdev.conf 10-quirks.conf 40-libinput.conf 70-wacom.conf 

Мы можем удалить драйвер libinput:

apt-get remove --auto-remove xserver-xorg-input-libinput

Установить xinput -калибратор

sudo apt-get install xinput-calibrator

Проверьте, нужно ли поменять местами оси . если вам нужно поменять местами, просто запустите:

xinit set-int-prop "eGalax Inc." "Evdev Axes Swap" 8 1

Запустите калибратор, чтобы получить правильные координаты x, y .

xinput_calibrator --output-type xinput

3
31.08.2020, 22:20
1 ответ

pgrep соответствует имени процесса, указанному в psбез -f, а pgrep -fсоответствует списку аргументов, указанному в ps -fили вашем нестандартном -ps aux.

firefoxизменяет имена своих потоков, чтобы определить, что каждый из них делает.

Попробуйте (принять значение по умолчанию $IFS):

.
ps -L -o comm= -p $(pgrep -wf firefox)

В котором перечислены имена всех потоков из процессов со списком аргументов, который содержит firefox, и вы увидите много таких вещей, как:

MainThread
gmain
gdbus
Gecko_IOThread
Timer
Netlink Monitor
Socket Thread
Permission
JS Watchdog
JS Helper
[...]

Таким образом, для firefoxвы можете сопоставить список аргументов (список аргументов из последней команды, которую они или их родители выполнили, если они есть )сpgrep -f firefox(добавить -w, если вы хотите перечислить все threads ), а не имя процесса/потока. Или pgrep -f '^[^ ]*firefox'для соответствия только первому слову этого списка аргументов(pgrepобъединяет аргументы с пробелами перед сопоставлением, как вps -f).

В любом случае, любой процесс может установить или изменить свое имя процесса или список аргументов на что угодно¹, поэтому поиск процессов таким образом никогда не будет надежным.

Если вы хотите сопоставить процесс, в котором в данный момент запущен исполняемый файл /usr/lib/firefox/firefox, в Linux и сzsh:

print -rC1 /proc/<1->/exe(Ne['[[ $REPLY -ef /usr/lib/firefox/firefox ]]']:h:t)

Или для резьбы:

print -rC1 /proc/<1->/task/*/exe(Ne['[[ $REPLY -ef /usr/lib/firefox/firefox ]]']:h:t)

(обратите внимание, что если у вас нет привилегий суперпользователя, вы не сможете получить эту информацию для процессов, запущенных не так, как вы ).

Или, возможно, более портативно сlsof:

lsof -Fd /usr/lib/firefox/firefox | sed '/^p/h;/^ftxt/!d;g;s/^p//'

Или для резьбы:

lsof -K -FKd /usr/lib/firefox/firefox | sed '/^K/h;/^ftxt/!d;g;s/^K//'

¹ однако обратите внимание, что длина имени процесса часто ограничена (15 байтами в Linux ), и в зависимости от ОС и версии ОС не весь список аргументов легко доступен для проверки системой.

4
18.03.2021, 23:08

Теги

Похожие вопросы