Gnome: очень медленный диалог поиска

Поиск по строке в gnome shell очень медленный.
Чтобы найти причину открываем wireshark и смотрим, что происходит на интерфейсах в момент ввода текста в поле поиска.

В момент ввода текста наблюдаем шквал обращений к шаре nfs (в моем случае).
Чтобы этого избежать достаточно занести все пути в игнор у tracker.
- Ставим dconf;
- Редактируем ключ
org.freedesktop.tracker.miner.files.ignored-directories; - Моментально все обращения к шаре пропадают.
В вашем случае может быть иначе. Однако, большинство проблем tracker’а связаны с медленной сетью.

PDF: уменьшаем размер файла

gs \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/ebook \
-dNOPAUSE \
-dQUIET \
-dBATCH \
-sOutputFile=doc_compress.pdf \
doc.pdf
Основная опция тут -dPDFSETTINGS=/ebook. Именна она указывает ghostscript жать пдф до состояния, которое пригодно для просмотра в читалках.
А чаще всего такая задача появляется когда кучу отсканированных страниц документа нужно согнать в один pdf.
Dnf: смотрим содержимое пакетов
Иногда требуется посмотреть содержимое пакета. Для этого есть пара удобный опций dnf и rpm.
У dnf это команда repoquery с опцией -l. У rpm это запрос -q c опцией -l.
Важно. Rpm работает только с установленными пакетами, а через dnf можно посмотреть состав любого пакета в репозитарии.
Посмотрим содержимое пакета fbreader.
# dnf repoquery -l fbreader
Последняя проверка окончания срока действия метаданных: 0:00:49 назад, Пн 07 мар 2022 17:16:45.
/usr/bin/FBReader
/usr/lib/.build-id
/usr/lib/.build-id/25
/usr/lib/.build-id/25/6e45979449fce7ee768d016a2cb5bc90d3afc6
/usr/share/FBReader
...
# rpm -ql fbreader
/usr/bin/FBReader
/usr/lib/.build-id
/usr/lib/.build-id/25
/usr/lib/.build-id/25/6e45979449fce7ee768d016a2cb5bc90d3afc6
/usr/share/FBReader
...
Литература
Xorg: двигаем мышку

Это какая-то напасть. Мониторы стаповятся больше, мониторов становится больше. А курсор мыши так и остался крохотным.
В винде была (может быть есть и сейчас) прикольная функция, которая позволяла подсветить местоположение курсора. Я хотел что-то аналогичное, но потом понял, что имея под руеой три монитора этот курсор потом надо еще и пригнать на нужный монитор, а это огромные затраты энеркии по его перемещению.
Что делать? Сделать хоткей, который будет пригонять курсор в центр конкретного экрана.
#!/usr/bin/env bash
SCREEN=${1:-0}
GEOMETRY=`xdotool getdisplaygeometry --screen ${SCREEN}`
while read w h
do
xdotool mousemove --screen $SCREEN $((w/2)) $((h/2))
done < <(echo $GEOMETRY)
В качестве аргумента скрипт принимает номер монитора на который хочется пригнать курсор.
Что полезного можно тут увидеть?
Первое - это подстановки. В качестве примера инициализация SCREEN.
| Выражение | parameter | parameter | parameter |
|---|---|---|---|
| в скрипте: | установлен и не Null | установлен и Null | не установлен |
| ${parameter:-word} | подставит parameter | подставит word | подставит word |
| ${parameter-word} | подставит parameter | подставит null | подставит word |
| ${parameter:=word} | подставит parameter | присвоит word | присвоит word |
| ${parameter=word} | подставит parameter | подставит null | присвоит word |
| ${parameter:?word} | подставит parameter | ошибка, exit | ошибка, exit |
| ${parameter?word} | подставит parameter | подставит null | ошибка, exit |
| ${parameter:+word} | подставит word | подставит null | подставит null |
| ${parameter+word} | подставит word | подставит word | подставит null |
Тут нужно обратить внимание на то, как раскрывается это выражение интерпретатором и что подстановка и присвоение - это разные вещи.
Подстановка возвращает выбранное значение word вместо переменной parameter. Присвоение же устанавливает parameter значение word.
Пример.
| Выражение | parameter | parameter | parameter |
|---|---|---|---|
| в скрипте: | установлен и не Null | установлен и Null | не установлен |
| ${FOO:-hello} | world | hello | hello |
| ${FOO-hello} | world | ”” | hello |
| ${FOO:=hello} | world | FOO=hello | FOO=hello |
| ${FOO=hello} | world | ”” | FOO=hello |
| ${FOO:?hello} | world | ошибка, exit | ошибка, exit |
| ${FOO?hello} | world | ”” | ошибка, exit |
| ${FOO:+hello} | hello | ”” | ”” |
| ${FOO+hello} | hello | hello | ”” |
А так же неименованные каналы. Про именованые каналы я уже писал. А неименованые отличаются тем, что не надо делать его вручную.
Литература:
Shell: генерируем последовательность дат
Простой случай когда надо сгенерировать последовательность дат. Например для генерации шаблона партиций в бд.
$ seq \
`date -d "2021-02-01 00:00:00" "+%s"` \
86400 \
`date -d "2021-09-01 00:00:00" "+%s"` \
| xargs -I{} date -d @{} +%Y-%m-%d
date -d "<date>" "+%s"- преобразовать датув секунды; seq <seconds from> 86400 <seconds to>- добавляем к стартовой дате по 1 дню в секундах;|- отправляем все на вход другой команде (в данном случае xargs);xargs -I{} <command>- подставляем каждую строку из входа на место {} в описании команды;date -d @{} +%Y-%m-%d- преобразуем секунды, которые были подставлены предыдущей командой в дату нужного формата.
$ seq \
`date -d "2021-02-01 00:00:00" "+%s"` \
86400 \
`date -d "2021-02-12 00:00:00" "+%s"` \
| xargs -I{} date -d @{} +%Y-%m-%d
2021-02-01
2021-02-02
2021-02-03
2021-02-04
2021-02-05
2021-02-06
2021-02-07
2021-02-08
2021-02-09
2021-02-10
2021-02-11
2021-02-12