Hatred's Log Place

DON'T PANIC!

May 23, 2022 - 8 minute read - Linux Life

Переустановка системы на ноутбуке или переезд - хуже пожара

На днях поборол жабу, и позволил себе купить на замену стокового системного HDD HGST Travelstart Z7K500 / 500Гб, новый SSD Samsung SSD 870 EVO.

Первое впечатление - систему стероидами накачали. А дальше - увлекательная процедура миграции нужного и не очень в новое окружение.

Бекап

Сохраняем, как миниум:

  • /etc
  • /home
  • /lib/firmware

Остальное по желанию и возможностям. У меня полностью менялся диск, поэтому старые данные не будут удаляться ещё давно (ага, а новым, по хорошему, бекап нужен :)).

UEFI

Перевёл систему на использование UEFI. BIOS позволяет, но исторически загрузка была Legacy BIOS. Secure Boot выключен. Диск размечен в GPT. Далее ничего сложного, руководство Manjaro достаточно лаконично:

Suspend / Resume на T530

Следующее, это волшебное исцеление зависания при выходе из suspend. Эти хаки больше не нужны:

Причём ни один из этих костылей не лечил выход из Suspend на ядрах новее 5.15. Сейчас работают все ядра.

Но меня такие “волшебные” излечения всегда огорчают: судя по всему, из-за разного времени отклика в системах присутствует гонка, которая может вылезти боком в каких-то других сценариях. И ударить не менее “магически”.

Миграция KDE Wallet

KDE хранит там всякую полезную информацию в зашифрованном виде. Тот же Akonadi хранит там креденшиналы для доступа к . Дефолтный “бумажник” разблокируется при входе.

Просто переносим настройки:

  • ~/.local/share/kwalletd

Желательно сделать это вне запущенной сессии KDE.

Миграция KOrganizer, Akonadi

Возможно, что настроить заново будет быстрее :)

Для начала я перенёс все настройки, которые были связаны с Akonadi:

  1. ~/.local/share/akonadi
  2. ~/.config/akonadi
    • у меня в akonadiserverrc прописано использовать PostgreSQL вместо MySQL.

Перетаскивать ~/.local/share/korganizer смысла нет, там только технические детали.

Но, оказалось, что версия Postgre обновилась с 13 на 14, поэтому пришлось сделать апгрейд по руководству:

sudo pacman -S postgresql-old-upgrade

На шаге --check у меня выдалось пару ошибок, в результате нужно устранять, удаляя новую базу и повторяя шаг initdb. В результате база была создана такой командой:

initdb --pgdata=$HOME/.local/share/akonadi/db_data --locale=C -E UTF8

После чего check прошёл без ошибок:

pg_upgrade -b /opt/pgsql-13/bin/ -B /usr/bin -d $HOME/.local/share/akonadi/db_data_old -D $HOME/.local/share/akonadi/db_data --check

И следующим шагом запускаем эту же команду, без --check:

pg_upgrade -b /opt/pgsql-13/bin/ -B /usr/bin -d $HOME/.local/share/akonadi/db_data_old -D $HOME/.local/share/akonadi/db_data

И запускаем Akonadi:

akonadictl start

На этом шаге нужно иметь KDE Wallet смигрированным.

Baloo

На любителя. Я сразу:

balooctl disable && balooctl purge

softu2f aka rust-u2f

Софтовый ключ U2F. Креденшиналы хранит в gnome-keyring. Поэтому нужно его сразу поставить:

sudo pacman -S gnome-keyring

Настройки:

  • ~/.local/share/keyrings

Сам rust-u2f никакие настройки не предоставляет в системе достаточно:

systemctl --system enable softu2f.socket
systemctl --user   enable softu2f.service
systemctl --system start softu2f.socket
systemctl --user   start softu2f.service

где нужно, он спросит пароль.

Wine

TBD. Точнее как, можно просто перенести ~/.wine, но потеряются все меню.

Меня переносятся:

  • ~/.local/share/applications
  • ~/.local/share/desktop-directories
  • ~/.local/share/mime

Дальше ещё что-то нужно сделать. Разбираюсь.

XDG пользовательские директории

Речь про всяки ~/Мои Документа и т.п. Я не люблю их в русской локализации, поэтому привожу файл ~/.config/user-dirs.dirs к такому виду:

# This file is written by xdg-user-dirs-update  
# If you want to change or add directories, just edit the line you're  
# interested in. All local changes will be retained on the next run  
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped  
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an  
# absolute path. No other format is supported.  
#    
XDG_DESKTOP_DIR="$HOME/Desktop"  
XDG_DOWNLOAD_DIR="$HOME/Downloads"  
XDG_TEMPLATES_DIR="$HOME/Templates"  
XDG_PUBLICSHARE_DIR="$HOME/Shared"  
XDG_DOCUMENTS_DIR="$HOME/Documents"  
XDG_MUSIC_DIR="$HOME/Music"  
XDG_PICTURES_DIR="$HOME/Pictures"  
XDG_VIDEOS_DIR="$HOME/Video"

А файл ~/.config/user-dirs.locale удаляю.

T530 Screen DPI

По всем канонам там 141 DPI. У меня настройка из двух шагов:

  1. Задание экрану ноутбука нужного DPI. После чего приложения на Qt5/Qt6 и в среде KDE замечательно подхватят и всё сделают за вас. С Gtk всё намного гиморнее. Но это другая песнь.
  2. Указание Xft.dpi.

Указываем через ~/.xprofile:

cat > ~/.xprofile << EOF
# Setup main output DPI
xrandr --output LVDS-1 --dpi 141
EOF

Либо просто восстанавливаем из старой домашней директории. Параметр --output здесь не нужен, но затесался исторически: --dpi - глобальная опция. Так сто ставим по желаемому монитору, остальные пусть подтягиваются:

Следующим шагом указать Xft.dpi. Правим ~/.Xresources, у меня содержимое до ужаса простое:

Xft.dpi: 141

После перезагрузки, можно удостоверится:

$ xrdb -query    
Xcursor.size:   24  
Xcursor.theme:  Bluecurve  
Xft.antialias:  1  
Xft.dpi:        141  
Xft.hinting:    1  
Xft.hintstyle:  hintslight  
Xft.rgba:       rgb

$ xdpyinfo | grep resolution:  
 resolution:    141x141 dots per inch

Xorg settings: legacy way

Сохраню этот блок в исторических целях. Сейчас этот подход у меня не работает. Точнее параметры экрана замечательно считываются из EDID, драйвера это видят, как и разрешение экрана, но всё равно ставят DPI в 96.

Итак. Указание физического размера экрана в миллиметрах.

Для этого шага создаём /etc/X11/xorg.conf.d/90-monitor.conf:

Section "Monitor"  
       Identifier "LVDS-1"  
       # DisplaySize taken from the EDID decode: 
       #   edid-decode /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-LVDS-1/edid  
       DisplaySize 344 194
EndSection

Можно линейкой померить, я взял данные из EDID:

edid-decode /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-LVDS-1/edid  
edid-decode (hex):  
  
00 ff ff ff ff ff ff 00 0d ae b1 15 00 00 00 00  
01 16 01 04 90 22 13 78 02 31 d5 9f 56 58 95 27  
15 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01  
01 01 01 01 01 01 96 3b 80 32 71 38 3e 40 5a 3c  
69 00 58 c2 10 00 00 1a 9b 25 80 ee 70 38 23 40  
35 23 35 00 58 c2 10 00 00 1a 00 00 00 fe 00 56  
43 4d 38 58 02 4e 31 35 36 48 47 0a 00 00 00 00  
00 00 41 31 9e 00 00 00 00 02 01 0a 20 20 00 05  
  
----------------  
  
Block 0, Base EDID:  
 EDID Structure Version & Revision: 1.4  
 Vendor & Product Identification:  
   Manufacturer: CMN  
   Model: 5553  
   Made in: week 1 of 2012  
 Basic Display Parameters & Features:  
   Digital display  
   Bits per primary color channel: 6  
   Digital interface is not defined  
   Maximum image size: 34 cm x 19 cm  
   Gamma: 2.20  
   Supported color formats: RGB 4:4:4  
   First detailed timing includes the native pixel format and preferred refresh rate  
 Color Characteristics:  
   Red  : 0.6210, 0.3388  
   Green: 0.3437, 0.5830  
   Blue : 0.1552, 0.0830  
   White: 0.3134, 0.3291  
 Established Timings I & II: none  
 Standard Timings: none  
 Detailed Timing Descriptors:  
   DTD 1:  1920x1080   60.005696 Hz  16:9     68.527 kHz    152.540000 MHz (344 mm x 194 mm)     <-- оно
                Hfront   90 Hsync  60 Hback  156 Hpol P  
                Vfront    6 Vsync   9 Vback   47 Vpol N  
   DTD 2:  1920x1080   40.009642 Hz  16:9     44.611 kHz     96.270000 MHz (344 mm x 194 mm)  
                Hfront   53 Hsync  35 Hback  150 Hpol P  
                Vfront    3 Vsync   5 Vback   27 Vpol N  
   Alphanumeric Data String: 'VCM8X'  
   Manufacturer-Specified Display Descriptor (0x00): 00 00 00 00 41 31 9e 00 00 00 00 02 01 0a 20 20 '....A1........  '  
Checksum: 0x05

Systemd

Тут дело касается пользовательских юнитов. Переносим:

  • ~/.local/share/systemd/user

У меня там автоматический бекап для навигатора Garmin.

Apparrmor

TBD: Оказывается он включен по умолчанию на Manjaro. Нужно покурить.

DavMail

Основной конфиг у меня в ~/.davmail.properties, но дистрибуция предоставляет возможность запуска нескольких копий с разными конфигами через systemd индивидуально для пользователя.

Например так:

systemctl --user enable davmail@default.service
systemctl --user start davmail@default.service

default можно меня на что угодно в любых количествах. Конфиг при этом будет искаться в ~/.config/davmail/default.properties. Понятно, что вместо default в имени будет то самое “что угодно”, которые вы указали в имени юнита.

У меня ~/.config/davmail/default.properties симлинк на ~/.davmail.properties.

QMapShack, QMapTool

В ~/.QMapShack только кеши онлайн карт! Настройки в ~/.config/QLandkarte. По историческим причинам: всё это выросло из QLandKarteGT (есть на этом бложике).

KiCAD

Настройки в ~/.config/kicad, а вот всякое дополнение, типа символов и посадочных мест в ~/.local/share/kicad.

VirtualBox

Настройки: ~/.config/VirtualBox

Виртуальные машины: ~/VirtualBox VMs

T530 PrintScreen

Следуем заметке: ThinkPad T530: клавиатура, делаем из PrintScr → Menu, а Launch1 - PrintScr. Ибо нефиг.

Revert to traditional interface names - мы за традиционные ценности (eth0, wlan0)

Знакомимся:

sudo ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules

Swapfile

Да, у меня так. Если он лежал на другом диске и разделы на нём никак не трогались, то resume_offset= не изменится. Нужно только не забыть добавить его в параметры Grub и сделать update-grub.

Если поменялся, запустить:

sudo filefrag -v /swapfile | grep '^[ \t]*0:'

Вывод:

  0:        0..       0:    3481600..   3481600:      1:

Число с двумя точками: 3481600.. и есть искомая величина. Естественно без точек.

Groups

Тоже постоянно забываю. Старый /etc я сохранил в /home/old-disk/etc, после чего:

cat /home/old-disk/etc/group | grep -w hatred | grep -v '^hatred' | awk -F: '{print $1}' | xargs -I{} sudo gpasswd -a hatred {}

Некоторые группы создаются при установке некоторых пакетов, если появилось предупреждение, что какой-то группы нет, проверьте, установлен ли нужный вам пакет. Или забить.

dmesg wheel group access

Но системах с ядром 5.10.4+ dmesg доступен только для root. Делаем его доступным и для группы wheel и, по необходимости, добавляем туда пользователей. К слову, если не уверены, лучше не делайте. Мне в dmesg нужно очень часто во время разработки лезть. Можно в терминале запускать сессию от другого пользователя без привилегий, но в группе wheel:

mkdir -p /etc/pacman/hooks
cat > /etc/pacman/hooks/10-dmesg-wheel-access.hook << EOF
[Trigger]  
Operation = Upgrade  
Type = Package  
Target = util-linux  
  
[Action]  
Description = Allow dmesg wheel access...  
When = PostTransaction  
Exec = /bin/sh -c '/usr/bin/chown root:wheel /usr/bin/dmesg ; /usr/bin/chmod 750 /usr/bin/dmesg ; /usr/bin/setcap cap_syslog=ep /usr/bin/dmesg'
EOF

T530 Bluetooth firmware

Лежит в:

/lib/firmware/brcm/BCM20702A1-0a5c-21e6.hcd
cp /home/old-disk/lib/firmware/brcm/BCM20702A1-0a5c-21e6.hcd /lib/firmware/brcm/

Ранее доставал его из драйверов под Windows, и сопровождалось такой заметкой:

Begin reading from the link:
http://www.slackwiki.com/Btfirmware-nonfree
Second useful info:
http://askubuntu.com/questions/657392/broadcom-bluetooth-module-does-not-work-in-ubuntu-15-04-broadcom-216f-bt

И код:

wget https://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles/g4wb12ww.exe  
innoextract g4wb12ww.exe  
cp app/Win64/BCM20702A1_001.002.014.0449.0462.hex .  
hex2hcd BCM20702A1_001.002.014.0449.0462.hex -o BCM20702A1-0a5c-21e6.hcd  
sudo cp BCM20702A1-0a5c-21e6.hcd /lib/firmware/brcm/

Xorg settings

Выше уже было про DPI экрана. Но стоит проанализировать и прочие конфиги в /home/old-disk/etc/X11/xorg.conf.d

Logitech MX Master

Ставим logiops:

yay -S logiops

Восстанавливаем конфиг /etc/logid.cfg:

sudo cp /home/old-disk/etc/logid.cfg /etc/

И включаем:

sudo systemctl enable logid
sudo systemctl start logid

Прочее

Отдельные приложения, типа Qt Creator, Firefox, Thunderbird хранят свои настройки достаточно изолировано и можно просто скопировать нужную директорию. Поэтому особых трудностей тут возникнуть не должно.

Стоит не забыть про “системные” директории типа:

  • ~/.fonts - с вашими локальными шрифтами
  • ~/.icons - со схемами иконок
  • ~/.cache - для там, в основном, шлак, но вдруг захочется перенести кеш yay.

Fontconfig давно переехал в ~/.config/fontconfig.

Думаю, что вспомнил далеко не всё, что ещё вылезет - буду дополнять.