💡 Полезные Советы
Как навсегда исправить "Troubleshooting keychain issues" в VS Code на Raspberry Pi и Linux
Если вы работаете с Visual Studio Code на Raspberry Pi (или любом другом Linux-дистрибутиве с нестандартной графической оболочкой, например на Wayland), то рано или поздно при попытке авторизоваться в GitHub или синхронизировать настройки вы увидите назойливое окно:
"An OS keyring couldn't be identified for storing the encryption related data in your current desktop environment."
Редактор предложит перейти по ссылке или выбрать Use weaker encryption. В этой статье мы разберем, почему нельзя нажимать кнопку слабого шифрования, и как настроить всё правильно с точки зрения безопасности.
Почему это происходит?
VS Code (построенный на базе Chromium) пытается найти системное защищенное хранилище (keyring), чтобы безопасно спрятать туда ваш токен авторизации (OAuth). Однако в легковесных средах на Raspberry Pi демон ключей часто либо не установлен, либо запускается не так, как ожидает редактор. В итоге VS Code "слепнет" и выдает ошибку.
Быстрое, но опасное решение (Не рекомендую)
Самый частый совет в интернете - прописать в настройках запуска VS Code параметр "password-store": "basic". Да, окно ошибки пропадет. Но ваш секретный токен от GitHub будет сохранен в обычном текстовом файле. Если кто-то получит доступ к файловой системе вашей "малинки" - он получит и полный доступ к вашим репозиториям.
Правильное решение: Настраиваем gnome-keyring
Мы пойдем по пути системного администратора и заставим VS Code работать с системным шифрованием через libsecret.
1. Установка необходимых библиотек
Открываем терминал и ставим сам менеджер ключей и графическую утилиту для управления им:
sudo apt update
sudo apt install gnome-keyring libpam-gnome-keyring seahorse libsecret-1-0 libsecret-tools2. Создание системной связки ключей
Чтобы система могла хранить пароли, нам нужно физически создать "сейф".
- Запускаем установленную утилиту (в терминале вводим
seahorse &или ищем "Пароли и ключи" в меню приложений). - Жмем правой кнопкой мыши в левой колонке -> Создать новую связку ключей (New Keyring).
- Важно! Называем её строго Login (с большой буквы).
- Программа попросит задать пароль. Укажите точно такой же пароль, с которым вы входите в систему. Это позволит Linux автоматически открывать сейф при загрузке.
- Нажмите на новую связку правой кнопкой и выберите "Сделать по умолчанию".
3. Принудительное указание хранилища для VS Code
Осталось сказать редактору, чтобы он перестал гадать и использовал именно нашу новую связку.
- Закройте VS Code, если он открыт, и "убейте" фоновые процессы командой:
killall code Откройте файл аргументов запуска:
nano ~/.vscode/argv.jsonДобавьте строку
"password-store": "gnome-libsecret"перед закрывающей скобкой. Должно получиться так(если в файле ещё что то было не забудьте поставить запятую, подробнее читайте в FAQ ниже):{ "disable-hardware-acceleration": true, "password-store": "gnome-libsecret" }- Сохраните изменения (Ctrl+O, Enter, Ctrl+X).
Ура!
Запускаем Visual Studio Code и спокойно авторизуемся в GitHub. Больше никаких ошибок! Токен надежно зашифрован алгоритмами операционной системы, а любые другие расширения (Copilot, базы данных) будут автоматически использовать это безопасное хранилище.
FAQ: Часто задаваемые вопросы и возможные ошибки
1. Почему в инструкции сказано "не забудьте поставить запятую" в файле argv.json?
Файл argv.json написан в формате JSON. Одно из главных правил этого формата - все параметры внутри фигурных скобок { } должны разделяться запятыми. Запятая ставится после каждого параметра, кроме самого последнего.
Если в вашем файле уже были какие-то настройки, и вы добавляете "password-store" в конец, обязательно поставьте запятую после предыдущей строки.
❌ Неправильно (вызовет ошибку при запуске VS Code):
{
"disable-crash-reporter": true
"password-store": "gnome-libsecret"
}✅ Правильно:
{
"disable-crash-reporter": true,
"password-store": "gnome-libsecret"
}2. Что делать, если файла ~/.vscode/argv.json вообще нет?
Такое бывает, если вы только что установили редактор и ни разу не меняли параметры его запуска. Просто создайте этот файл вручную и впишите туда структуру с нуля:
{
"password-store": "gnome-libsecret"
}(Заметьте: так как параметр здесь всего один, запятая после него не ставится).
3. Я поменял пароль от своего пользователя на Raspberry Pi, и теперь при запуске VS Code снова выскакивают окна.
Когда мы создавали связку ключей Login, мы задали ей пароль, совпадающий с паролем вашего пользователя. Это позволяет системе разблокировать сейф автоматически при входе. Если вы изменили пароль пользователя в Linux (через команду passwd), пароль от сейфа Login остался старым, и автоматическая разблокировка сломалась.
Как исправить: Откройте утилиту Seahorse ("Пароли и ключи"), нажмите правой кнопкой мыши на связку Login, выберите "Изменить пароль" и укажите ваш новый пароль от системы.
4. Подойдет ли эта инструкция для других дистрибутивов Linux (Ubuntu, Debian, Fedora)?
Да, абсолютно. Проблема с "keychain issues" в Visual Studio Code не является эксклюзивом для Raspberry Pi. Она возникает на любом Linux-дистрибутиве, где графическая оболочка (особенно на базе Wayland) или оконный менеджер (i3, sway) не инициализирует gnome-keyring должным образом по умолчанию. Описанный метод с libsecret - это универсальное и правильное решение для всего семейства Linux.
Глоссарий
- Keyring / Keychain (Связка ключей) - системное зашифрованное хранилище в операционной системе, предназначенное для безопасного хранения паролей, ключей шифрования и сертификатов.
- OAuth-токен - специальный цифровой ключ (строка символов), который GitHub выдает приложению (например, Visual Studio Code), чтобы оно могло выполнять действия от вашего имени без необходимости каждый раз вводить логин и пароль.
- gnome-keyring - фоновая служба (демон) в Linux, которая отвечает за управление системной связкой ключей и обеспечивает безопасное хранение секретов.
- libsecret - системная библиотека, которая служит стандартизированным "мостом". Через нее различные программы (включая VS Code) общаются с gnome-keyring, чтобы положить или достать пароль, не вникая в тонкости работы самого хранилища.
- Seahorse (Пароли и ключи) - графическая программа для среды Linux, которая позволяет пользователю визуально просматривать, создавать и управлять своими связками ключей и паролями.
- Wayland - современный протокол графического сервера в Linux (активно используется в последних версиях Raspberry Pi OS). Из-за его архитектурных отличий от старого X11 некоторые классические механизмы (например, автозапуск менеджеров паролей) могут работать нестандартно, что и вызывает подобные ошибки.
- argv.json - скрытый конфигурационный файл Visual Studio Code, в котором задаются низкоуровневые параметры запуска редактора, применяемые еще до загрузки основного графического интерфейса.
- Weaker encryption (Слабое шифрование) - механизм обходного хранения секретов в VS Code, при котором токены сохраняются в локальном файле настроек редактора без использования криптографической защиты операционной системы.
Как установить Docker на Raspberry Pi 5: Полное пошаговое руководство
Raspberry Pi 5 - это невероятно мощный мини-компьютер, который идеально подходит для создания домашнего сервера, медиацентра или системы умного дома. Но чтобы выжать из него максимум и не захламлять систему десятками зависимостей, лучше всего использовать контейнеризацию.
Специально для читателей riopass.ru мы подготовили простую и быструю инструкцию по установке Docker на Raspberry Pi 5.
Подготовка системы
Перед установкой любого серьезного программного обеспечения правило номер один - обновить систему. Это поможет избежать конфликтов версий и гарантирует, что вы используете самые свежие пакеты безопасности.
Откройте терминал на вашей Raspberry Pi (или подключитесь к ней по SSH) и введите следующую команду:
sudo apt update && sudo apt upgrade -yДождитесь завершения процесса. Если обновлений было много, не лишним будет перезагрузить устройство командой sudo reboot
Установка Docker
Самый простой и официально рекомендуемый способ установки Docker на Raspberry Pi OS (которая базируется на Debian) - использование автоматического скрипта установки.
1. Загрузка установочного скрипта
Скачайте официальный скрипт с сайта Docker с помощью утилиты curl:
curl -fsSL https://get.docker.com -o get-docker.sh2. Запуск скрипта
Теперь запустите скачанный скрипт с правами суперпользователя:
sudo sh get-docker.shПроцесс установки займет пару минут. Скрипт самостоятельно определит архитектуру вашего процессора (ARM64 для Raspberry Pi 5) и скачает нужные версии пакетов.

Настройка прав доступа (чтобы работать без sudo)
По умолчанию для выполнения команд Docker требуются права root. Постоянно писать sudo docker - это неудобно и не совсем безопасно. Чтобы этого избежать, нужно добавить вашего текущего пользователя (обычно это пользователь pi или тот, которого вы создали при установке системы) в группу docker
Выполните команду:
sudo usermod -aG docker $USERЧтобы изменения вступили в силу без перезагрузки всей системы, примените новую группу:
newgrp docker(Примечание: если после этого команды Docker все равно требуют sudo, просто перезагрузите Raspberry Pi командой sudo reboot).
Проверка установки
Давайте убедимся, что всё прошло успешно. Введите в терминал команду для проверки версии:
docker --versionВы должны увидеть актуальную версию Docker, например: Docker version 29.4.0, build 9d7ad9f.
А теперь - традиционный тест! Запустим тестовый контейнер hello-world:
docker run hello-worldЕсли установка прошла успешно, Docker скачает минималистичный образ и выведет на экран приветственное сообщение: "Hello from Docker!".
Настройка автозапуска
Чтобы контейнеры автоматически поднимались после сбоя питания или перезагрузки Raspberry Pi, нужно добавить службу Docker в автозагрузку:
sudo systemctl enable docker.service
sudo systemctl enable containerd.serviceОставайтесь с riopass.ru, впереди еще много полезных шпаргалок по настройке вашего домашнего сервера!
FAQ: Часто задаваемые вопросы
В: Почему Docker лучше обычной установки программ через apt install?
О: Docker изолирует приложения. Вы можете запустить пять разных версий Python на одной Raspberry Pi 5, и они не будут конфликтовать. Кроме того, удаление программы в Docker - это просто удаление контейнера, после которого в основной системе не остается никакого "мусора".
В: Сильно ли Docker нагружает Raspberry Pi 5?
О: Raspberry Pi 5 обладает мощным процессором и быстрой оперативной памятью, поэтому накладные расходы на работу Docker практически незаметны (обычно это 1-2% ресурсов). Это гораздо эффективнее, чем использование виртуальных машин.
В: Что делать, если Docker не скачивает образы (ошибки "Timeout" или "Connection refused")?
О: В некоторых регионах доступ к официальному Docker Hub может быть ограничен или работать нестабильно. В таких случаях можно использовать зеркала (прокси-репозитории).
Одним из надежных вариантов является прокси от Timeweb. Чтобы им воспользоваться, нужно отредактировать (или создать) файл конфигурации:
sudo nano /etc/docker/daemon.jsonДобавьте туда следующий адрес:
{
"registry-mirrors": ["https://dockerhub.timeweb.cloud/"]
}После этого перезапустите службу: sudo systemctl restart docker. Теперь образы будут скачиваться через это зеркало.
В: Нужно ли использовать 64-битную ОС для Docker на Raspberry Pi 5?
О: Да, крайне желательно. Raspberry Pi 5 - это 64-битное устройство, и Docker работает эффективнее именно на 64-битных версиях Raspberry Pi OS или Ubuntu. Это также дает доступ к большему количеству современных образов.
В: Как обновить Docker до последней версии?
О: Поскольку мы устанавливали его через официальный репозиторий, Docker будет обновляться автоматически при выполнении стандартной команды обновления системы: sudo apt update && sudo apt upgrade.
Глоссарий
- Docker (Докер) - специальная платформа, которая позволяет упаковать любую программу со всеми ее настройками и файлами в единый стандартизированный блок. Благодаря этому программа будет одинаково хорошо работать на любом устройстве, будь то ваш ноутбук или Raspberry Pi.
- Docker Hub - крупнейшее в мире публичное хранилище (реестр) образов Docker. Это своего рода "магазин приложений", откуда скачиваются официальные образы Python, Nginx, PostgreSQL и тысяч других программ.
- Контейнеризация - сама технология изоляции приложений друг от друга и от основной операционной системы. Контейнеры потребляют гораздо меньше ресурсов, чем традиционные виртуальные машины.
- Образ (Image) - это готовый неизменяемый шаблон или "чертеж" программы. Скачивая образ (например, hello-world), вы получаете инструкцию для системы, как именно запускать приложение.
- Контейнер (Container) - это "оживший" образ. Запущенная и работающая в изолированной среде программа. Из одного образа можно запустить несколько одинаковых контейнеров.
- Репозиторий (Repository) - коллекция образов Docker с одинаковым именем, но разными тегами (версиями). Например, в репозитории python могут быть теги
3.10, 3.12-slimи так далее. - Терминал (Командная строка) - текстовый интерфейс для общения с операционной системой. Вместо того чтобы кликать мышкой по иконкам, вы вводите текстовые команды.
- SSH (Secure Shell) - защищенный протокол, который позволяет вам подключиться к терминалу вашей Raspberry Pi удаленно, например, с основного компьютера или ноутбука.
- Root / Sudo - Root это главный администратор (суперпользователь) в системах Linux, которому разрешено делать с системой абсолютно всё. Команда sudo (Superuser DO) позволяет обычному пользователю временно выполнить конкретную команду с правами этого самого главного администратора.
- Скрипт - текстовый файл, содержащий последовательность команд, которые компьютер должен выполнить автоматически (например, скрипт установки Docker скачивает, распаковывает и настраивает все нужные файлы за вас).
Что такое Pi-Apps и как его установить на Raspberry Pi
Если вы используете свой Raspberry Pi 5 в качестве настольного компьютера, ретро-консоли или медиацентра, вы наверняка сталкивались с тем, что установка некоторых программ в Linux требует поиска сложных команд и ручной компиляции кода. Именно эту проблему решает Pi-Apps.
Что такое Pi-Apps?

Pi-Apps - это бесплатный магазин приложений с открытым исходным кодом, созданный специально для Raspberry Pi (и других устройств на базе ARM/x86 Linux).
Главная его цель - максимально упростить процесс установки софта. По сути, это набор скриптов, упакованных в удобный графический интерфейс. С помощью Pi-Apps вы можете скачивать, обновлять и удалять десятки популярных программ буквально в пару кликов, без необходимости лезть в командную строку.
Что можно установить через Pi-Apps?

- Браузеры: Chromium (с поддержкой Widevine для Netflix/Spotify), Firefox, Tor и так далее
- Мессенджеры: Telegram, Discord, Skype.
- Разработка: Visual Studio Code, Arduino IDE, Android Studio.
- Игры: Minecraft, Doom, эмуляторы Box86/Box64 для запуска Windows-игр,.
- Утилиты: GIMP, OBS Studio, TeamViewer.
Как установить Pi-Apps на Raspberry Pi
Процесс установки невероятно прост и занимает всего пару минут. Все, что вам нужно - это доступ к интернету и открытый терминал.
***
Перед установкой любого нового софта рекомендуется обновить систему. Это поможет избежать конфликтов версий.
- Откройте терминал
(сочетание клавиш Ctrl + Alt + T). Введите следующую команду и нажмите Enter:
sudo apt update && sudo apt upgrade -y- Дождитесь завершения процесса обновления.
Установка Pi-Apps
Разработчик Pi-Apps (Botspot) подготовил удобный скрипт автоматической установки. В том же терминале введите одну простенькую команду:
wget -qO- https://raw.githubusercontent.com/Botspot/pi-apps/master/install | bashЗавершение и запуск
Скрипт автоматически скачает необходимые файлы, установит зависимости и создаст ярлыки. Процесс полностью автоматизирован.
Как только в терминале появится сообщение об успешной установке, вы можете его закрыть.
Где найти Pi-Apps?
На вашем рабочем столе появится иконка Pi-Apps.
Также программу можно найти в главном меню Raspberry Pi OS в разделе "Стандартные" (Accessories).
Как пользоваться Pi-Apps
Интерфейс программы интуитивно понятен:
- Запустите Pi-Apps.
- Перед вами появится окно с категориями (Games, Internet, Tools и т.д.).
- Выберите нужную категорию или воспользуйтесь кнопкой Search (Поиск), чтобы найти конкретное приложение.
- Выберите программу и нажмите кнопку Install (Установить).
- После этого откроется окно терминала, где вы сможете наблюдать за процессом установки. Как только он завершится, программа будет готова к использованию!
Для кого это решение:
Идеально подходит тем, у кого дома нет публичного/статического ("белого") IP-адреса, чтобы напрямую открыть порты, но есть любой недорогой VPS-сервер. В данном руководстве для примера, мы используем сервер игры Counter-Strike 1.6.
Как работает эта архитектура:
Мы превращаем VPS сервер в публичную "витрину" для домашнего железа, связывая их через неблокируемый VPN-туннель.
- VPS (Внешний шлюз): Смотрит в интернет своим реальным IP-адресом и принимает подключения игроков. Внутри туннеля AmneziaWG он получает адрес 10.8.0.1.
- Raspberry Pi 5 (Домашний сервер): Спокойно стоит за провайдерским NAT. Она сама инициирует подключение к VPS, пробивая туннель, и получает внутренний адрес 10.8.0.2.
- Магия маршрутизации: Мы берем внешний игровой порт (27015 UDP/TCP) на VPS и прозрачно пробрасываем его сквозь туннель прямо на вашу домашнюю "малинку", ну или linux сервер.
Главный плюс: мы буквально "вытягиваем" Raspberry Pi в глобальную сеть, не ломая то, что уже работает. Порт-форвардинг настраивается настолько ювелирно, что крутящиеся на VPS сайты, веб-сервисы и боты даже не заметят соседства с игровым сервером.
1. Установка AmneziaWG
На сервере VPS (Ubuntu/Debian):
sudo add-apt-repository ppa:amnezia/ppa
sudo apt update
sudo apt install amneziawg-tools amneziawg-dkms -yНа Raspberry Pi 5 (Особый способ установки ключей, обходящий блокировки):
sudo apt update
sudo apt install -y gnupg2 curl linux-headers-$(uname -r)
# Скачиваем ключ через 80 порт
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 57290828
gpg --export 57290828 | sudo tee /usr/share/keyrings/amnezia.gpg > /dev/null
# Добавляем репозиторий
echo "deb [signed-by=/usr/share/keyrings/amnezia.gpg] https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/amneziawg.list
sudo apt update
sudo apt install -y amneziawg-tools amneziawg-dkms2. Генерация ключей
Все ключи для удобства генерируем на VPS, чтобы потом просто скопировать их в конфиги.
Выполняем на VPS:
mkdir -p ~/awg-keys && cd ~/awg-keys
awg genkey | tee server_private | awg pubkey > server_public
awg genkey | tee client_private | awg pubkey > client_public
# Выводим на экран и копируем в блокнот:
cat server_private && cat server_public
cat client_private && cat client_public3. Настройка VPS (Сервер)
Включаем маршрутизацию (форвардинг) в ядре:
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -pСоздаем конфигурационный файл:
sudo nano /etc/amnezia/amneziawg/awg0.confВставляем настройки (замените ключи на сгенерированные). Внимание: если ваш основной сетевой интерфейс называется не eth0, а ens3 - измените его в правилах PostUp/PostDown.
[Interface] PrivateKey = <server_private> Address = 10.8.0.1/24 ListenPort = 51820 # Магические параметры Amnezia Jc = 4 Jmin = 40 Jmax = 70 S1 = 29 S2 = 15 H1 = 2021056581 H2 = 641527027 H3 = 1018901243 H4 = 301646271 # Маскарадинг для выхода туннеля в сеть PostUp = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE [Peer] PublicKey = <client_public> AllowedIPs = 10.8.0.2/32Открываем порт в фаерволе (если используете UFW) и запускаем туннель:
sudo ufw allow 51820/udp sudo systemctl enable --now awg-quick@awg0
4. Настройка Raspberry Pi 5 (Клиент)
Создаем конфигурационный файл:
sudo nano /etc/amnezia/amneziawg/awg0.confВставляем настройки. Важно: Обязательно проверьте наличие заголовка
[Peer], без него парсер выдаст ошибкуLine unrecognized[Interface] PrivateKey = <client_private> Address = 10.8.0.2/24 Jc = 4 Jmin = 40 Jmax = 70 S1 = 29 S2 = 15 H1 = 2021056581 H2 = 641527027 H3 = 1018901243 H4 = 301646271 [Peer] PublicKey = <server_public> Endpoint = IP_ВАШЕГО_VPS:51820 AllowedIPs = 10.8.0.0/24 PersistentKeepalive = 25Запускаем туннель и проверяем пинг до VPS:
sudo systemctl enable --now awg-quick@awg0 ping -c 4 10.8.0.1
5. Настройка проброса портов (NAT и UFW) на VPS
Чтобы внешний трафик, приходящий на публичный IP VPS по порту 27015, улетал на домашнюю малинку, выполняем на VPS:
Открываем нужные порты для входящих подключений:
sudo ufw allow 27015/udp sudo ufw allow 27015/tcpКритически важный шаг: Разрешаем транзитный (FORWARD) трафик в UFW, иначе фаервол молча убьет пакеты, идущие сквозь сервер в туннель:
sudo ufw route allow proto udp to 10.8.0.2 port 27015 sudo ufw route allow proto tcp to 10.8.0.2 port 27015Прописываем правила
iptablesдля перенаправления (DNAT) и обратной подмены адреса (SNAT/MASQUERADE):# Перенаправление внутрь туннеля sudo iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination 10.8.0.2:27015 sudo iptables -t nat -A PREROUTING -p tcp --dport 27015 -j DNAT --to-destination 10.8.0.2:27015 # Обратный маскарадинг sudo iptables -t nat -A POSTROUTING -d 10.8.0.2 -p udp --dport 27015 -j MASQUERADE sudo iptables -t nat -A POSTROUTING -d 10.8.0.2 -p tcp --dport 27015 -j MASQUERADEСохраняем правила iptables, чтобы они пережили перезагрузку сервера:
sudo apt install iptables-persistent -y sudo netfilter-persistent save
Вывод:
Сервер работает стабильно, трафик полностью скрыт от DPI, а игровой сервер светит в мир с выделенного IP-адреса.
Сегодня разберем очень коварную проблему, с которой сталкиваются энтузиасты при покупке Raspberry Pi 5 на китайских маркетплейсах. Вы заказываете версию на 8 ГБ для своего нового домашнего сервера, радостно запускаете её, система обновляется, и после первой же перезагрузки плата превращается в безжизненный кусок текстолита.
Спойлер: дело чаще всего не в браке, а в хитрых аппаратных модификациях. И чтобы докопаться до истины, нам потребуется старый добрый UART.
Откуда берутся дешевые 8 ГБ?
На AliExpress массово продаются Raspberry Pi 5, которые изначально сошли с конвейера с 2 ГБ оперативной памяти. Умелые мастера выпаивают дешевый чип памяти и ставят на его место банку на 8 ГБ (например, от Samsung).
Проблема кроется в том, что объем памяти на Raspberry Pi аппаратно задается крошечными конфигурационными SMD-резисторами на плате. Перепаивать эту мелочь под микроскопом слишком долго, поэтому китайские продавцы этого просто не делают. В итоге получается плата-мутант: аппаратно она заявляет загрузчику, что она версия на 2 ГБ, но физически несет на борту 8 ГБ.
Ловушка обновления загрузчика (EEPROM)
До середины 2024 года встроенная прошивка Raspberry Pi (EEPROM) закрывала глаза на такие расхождения. Система просто загружалась и позволяла Linux работать со всеми доступными 8 ГБ.
Но в новых версиях прошивок (начиная с конца 2024 года) разработчики внедрили строгую проверку соответствия железа. Теперь загрузчик сравнивает аппаратный ID платы с физически обнаруженным чипом. Если есть расхождение - загрузка намертво блокируется ради безопасности.
Именно поэтому свежекупленная плата может отлично работать в первый день, но стоит Raspberry Pi OS в фоновом режиме обновить EEPROM - и вы получаете нерабочее устройство.
UART - ваш главный помощник в отладке
Когда плата не грузится, на мониторе через HDMI вы видите просто черный экран. Вентилятор может крутиться на 100%, но что именно пошло не так - загадка. Здесь на помощь приходит аппаратная отладка.

UART (Universal Asynchronous Receiver-Transmitter) - это низкоуровневый интерфейс, который выводит текстовые логи работы процессора и загрузчика еще до того, как инициализируется видеовыход.
У Raspberry Pi 5 есть огромное преимущество перед прошлыми поколениями - выделенный 3-контактный порт отладки (JST-SH), расположенный между разъемами micro-HDMI.


После подключения USB-адаптера к компьютеру, вам нужно открыть терминал с правильными параметрами.
Параметры соединения:
Baud rate (скорость): 115200
Data bits: 8
Parity: None (Нет)
Stop bits: 1
Flow control: None (Нет)
Для Windows:
Зайдите в Диспетчер устройств -> Порты (COM и LPT) и найдите номер вашего адаптера (например,
COM3).Скачайте и откройте программу PuTTY.
Выберите тип соединения (Connection type): Serial.
В поле Serial line впишите ваш порт (например,
COM3), а в поле Speed -115200.Нажмите Open.
Запуск процесса отладки
Нажмите кнопку Open внизу окна PuTTY. Откроется черное пустое окно терминала.
Только после этого подайте питание на вашу Raspberry Pi 5 (подключите блок питания).
В черном окне сразу же должен побежать белый текст - это логи загрузчика (EEPROM) и старта системы.
В окне терминала побегут логи. Если у вас модифицированная плата с новой прошивкой, вы увидите, как загрузка разбивается о критическую ошибку: BOOT ERROR: code 9 - 'SDRAM mismatch' (Процессор ожидает конфигурацию 16 Gbit (2 ГБ), а видит актуальную конфигурацию 64 Gbit (8 ГБ)).

Инструкция по "оживлению" платы
Чтобы плата стабильно работала, нужно откатить прошивку на ту, которая не проверяет память, и жестко запретить ей обновляться.
Откат загрузчика:
Берем обычную USB-флешку или MicroSD, форматируем строго в FAT32.
Скачиваем с официального GitHub (
raspberrypi/rpi-eepromв разделе Releases) архив старой прошивки восстановления (ищите версии до сентября 2024 года). Можно скачать с нашего сайта.Распаковываем все файлы из архива прямо в корень флешки (без подпапок).
Вставляем в выключенную Raspberry Pi, подаем питание. Ждем несколько секунд, пока зеленый диод на плате не начнет быстро и равномерно мигать (это означает успешную перепрошивку EEPROM).
Блокировка обновлений (Критически важно!):
Вытаскиваем флешку восстановления, вставляем рабочий накопитель с Raspberry Pi OS и успешно загружаемся в систему.
Немедленно открываем терминал Linux и навсегда отключаем фоновую службу обновления EEPROM двумя командами:
sudo systemctl disable rpi-eeprom-update sudo systemctl mask rpi-eeprom-update
Стоит ли игра свеч?
Покупка модифицированной Raspberry Pi на китайских маркетплейсах - это самая настоящая лотерея, в которой вы расплачиваетесь своим собственным временем. Ради сомнительной экономии вы рискуете получить нестабильного "франкенштейна" и потратить несколько вечеров кряду, пытаясь заставить его хотя бы загрузить операционную систему. Если вы собираете надежный домашний сервер, где важен стабильный аптайм и отсутствие сюрпризов, такой подход категорически не годится! Лучше переплатить за официальную плату и спать спокойно.
Но в этой ситуации есть один огромный, жирный плюс. Пытаясь оживить этот "кирпич", изучая логи через UART, откатывая версии загрузчика EEPROM и ковыряясь в консоли Linux через отладочный порт, вы прокачаете свои навыки траблшутинга на все сто. Вы потеряете кучу нервов и времени, но взамен получите тот самый хардкорный опыт работы с железом, который не даст ни один учебник. Не покупайте это, если вам нужно, чтобы всё работало "из коробки". Покупайте, если хотите научиться решать настоящие инженерные проблемы.
Бонус. Тот самый момент "окирпичивания" (Ошибка SDRAM)
Это ранняя стадия загрузки, где система проводит инвентаризацию "железа". Обратите внимание на ключевые строки:
2.37 Expected configuration 16 Gbit: Загрузчик считывает конфигурационные резисторы на плате и ждет, что сейчас увидит 2 ГБ памяти (16 Гигабит).2.41 Actual configuration 32 Gbit byte-mode: Процессор физически стучится в чип памяти и понимает, что перед ним 4 ГБ (32 Гигабита). Примечание: на платах с 8 ГБ здесь будет значение 64 Gbit.2.48 BOOT ERROR: code 9 - 'SDRAM mismatch': Система уходит в жесткий отказ. Дальше этой строчки процесс не пойдет, пока мы не вмешаемся.

Чудесное исцеление (Успешная прошивка EEPROM)
Это лог успешного отката прошивки со спасательной флешки. Именно ради этих строк я и затевал всю возню с UART!
6.82 Writing EEPROM: Начался процесс стирания злой прошивки и записи доброй (старой). Полоса из плюсиков и точек показывает прогресс.14.70 Verify BOOT EEPROM: Плата умная, она проверяет сама себя, чтобы убедиться, что новая прошивка легла ровно и без ошибок.19.08 BOOT-EEPROM: UPDATED: Победа. Загрузчик успешно обновлен. После этой строчки можно выключать питание, вставлять флешку с Raspberry Pi OS и наслаждаться работающим сервером или мини ПК. НО если у Вас OS RASBIAN не забудьте про:
sudo systemctl disable rpi-eeprom-update sudo systemctl mask rpi-eeprom-update
Внимание: Система обновляется как вирус, даже без интернета!
ВАЖНО: даже если вы успешно откатили EEPROM через флешку восстановления, расслабляться рано. Официальная операционная система Raspberry Pi OS обновляет прошивку загрузчика без спроса, словно вирус.
Самое коварное здесь то, что ей для этого даже не нужен доступ к сети! Свежие файлы прошивки уже лежат внутри самого установочного образа операционной системы. Как только вы впервые загружаете свежую ОС, фоновая служба rpi-eeprom-update сверяет версии, находит в своих локальных папках более новую "злую" прошивку и молча подготавливает её к установке.
При следующей перезагрузке ваша плата снова превратится в кирпич, и вам в любом случае придется заново искать старые файлы и откатывать EEPROM, теряя кучу времени!
Именно поэтому порядок действий должен быть строго таким: откатили прошивку -> успешно загрузились в Linux -> немедленно отключили службу rpi-eeprom-update в терминале -> и только потом начали настраивать сеть и сервер.
Как сбросить пароль Raspberry Pi оффлайн (через редактирование shadow)
С моей Raspberry Pi 5 всё не так, при добавлении init=/bin/sh в cmdline.txt на Raspberry Pi появляется чёрный экран и кулер работает на максимуме, явный симптом зависания и проблема глубже на уровне железа. Поэтому я заказал UART провод, скоро подключимся по COM порту с помощью PuTTy и посмотрим, какие проблемы при старте системы.
Раз init=/bin/sh ведёт себя нестабильно, можно сбросить пароль оффлайн, изменив shadow на карте памяти. Если у вас Windows, используйте виртуальную машину (VirtualBox/VMware) с любым Live-образом Linux (Ubuntu/Debian).
Шаг 1: Подготовка VirtualBox (если у вас Windows).
Проброс USB-картридера в виртуальную машину часто вызывает трудности, так как Windows "захватывает" устройство первой.
- Установите VirtualBox Extension Pack (обязательно для работы USB 2.0/3.0).
- Вставьте картридер с флешкой в ПК.
- В настройках машины: USB -> Поставьте галочку Включить контроллер USB -> Нажмите иконку с плюсом ("Добавить фильтр") -> Выберите ваш картридер (например, Generic Mass Storage).
- Важно: Теперь извлеките картридер из ПК. Запустите виртуальную машину.
- Когда Linux загрузится, вставьте картридер обратно в порт. Благодаря фильтру он сразу "пробросится" внутрь виртуальной машины.

Шаг 2: Монтирование файловой системы (выполняйте только если карта не смонтировалась автоматически - см. Бонус внизу)
- Узнайте имя вашего диска:
lsblk
- Обычно карта памяти видна как sdb или mmcblk0. На ней будет два раздела:
- маленький bootfs (FAT32)
- большой rootfs (EXT4) - он нам и нужен.
Смонтируйте раздел с системой (замените sdb2 на ваш раздел):
sudo mkdir -p /mnt/rpi sudo mount /dev/sdb2 /mnt/rpi
Шаг 3: Удаление пароля
Нам нужно отредактировать файл /etc/shadow, где хранятся хеши паролей.
Сделайте резервную копию на всякий случай:
sudo cp /mnt/rpi/etc/shadow /mnt/rpi/etc/shadow.bakОткройте файл в редакторе:
sudo nano /mnt/rpi/etc/shadowНайдите строку с вашим пользователем (обычно pi, root или ваш логин). Она выглядит примерно так:
user:$6$kH...поток_символов...:19000:0:99999:7:::- Что делать: Удалите всё, что находится между первым и вторым двоеточием.

- Было:
user:$6$aBcDeF...:12345:... - Стало:
user::12345:... - Примечание: Двоеточия должны остаться, между ними должно быть пусто. Это означает "пароль не задан".
- Было:
- Сохраните файл: Ctrl+O -> Enter -> Ctrl+X.
Шаг 4: Завершение
Размонтируйте диск перед извлечением, чтобы не повредить файловую систему:
sudo umount /mnt/rpi- Вставьте карту обратно в Raspberry Pi и включите его.
- Система пустит вас без пароля (или попросит логин - введите имя пользователя и нажмите Enter).
- Сразу же задайте новый пароль:
passwd
Бонус: если раздел уже смонтирован (пример с /run/media/...) [Как у меня]
Во многих десктоп‑дистрибутивах (KDE, GNOME, XFCE) флешки и SD‑карты автоматически монтируются файловым менеджером в /run/media/ИМЯ_ПОЛЬЗОВАТЕЛЯ/МЕТКА_НОСИТЕЛЯ.
Это значит, что вам может не понадобиться вручную монтировать раздел в /mnt - достаточно сразу отредактировать файл по уже существующему пути.
Например, если система смонтировала root‑раздел Raspberry Pi как /run/media/merion/rootfs, достаточно выполнить:
sudo nano /run/media/merion(ваше имя пользователя)/rootfs/etc/shadow
Дальнейшие действия те же: найти нужного пользователя и очистить поле с хешем пароля между первым и вторым двоеточием, сохранить файл и корректно размонтировать устройство.
Чем отличается /mnt от /run/media ?
/mnt - исторически "универсальная" точка для ручного временного монтирования, куда админ сам монтирует нужный раздел командой mount.
/media и /run/media - стандартные места для автоматического монтирования съёмных носителей (флешки, SD‑карты и т.п.) через udisks/desktop‑окружение, обычно подподкаталог /run/media/ПОЛЬЗОВАТЕЛЬ/….