Найдено и проверено живым прогоном на этой машине (реальный GTK-рабочий стол, реальные профили agy) — не по чтению кода. 1. Значок .desktop-записи был .ico. Измерено: GdkPixbuf.Pixbuf.new_from_file на HermesHub.ico падает с "Compressed icons are not supported". .desktop-файл с нерендерящейся иконкой меню приложений и файловый менеджер просто показывают пустым — без ошибки, молча. PNG в тех же ассетах уже был и загружается (проверено: 256x256). Подставлен app_icon_256.png. 2. Хаб нельзя было остановить иначе как из терминала. На Windows сервер стартует из HermesHubWeb.exe, который держит значок в системном трее — оттуда «Exit» останавливает процесс. На Linux сервер остаётся в фоне после закрытия окна браузера (так и задумано — не переустанавливать каждый раз), но ни кнопки в интерфейсе (её нет ни на одной платформе), ни трея, ни пункта меню не было вовсе. launcher/hermes-hub-stop.sh — недостающий эквивалент «Exit из трея»: доступен из меню приложений через собственный .desktop-пункт, использует ту же функцию, что и install/uninstall. Проверено живым прогоном: сервер запущен, остановлен через новый лаунчер, curl после этого получает connection refused. 3. uninstall-linux.sh не останавливал работающий хаб перед удалением файлов — та же причина, что install уже чинил для установки: с --purge-user-data это ещё и rm -rf каталогов, на которые у живого процесса открыты файловые дескрипторы. Измерено: сервер, запущенный в песочнице, оставался в списке процессов после uninstall-linux.sh до этой правки. Добавлена та же остановка, тем же кодом. 4. stop_running_hub была вписана отдельно в install-linux.sh и uninstall-linux.sh — две копии, которые разошлись бы при правке одной незамеченной для другой. Вынесена в installer/lib_stop_running_hub.sh, источается обоими скриптами и новым лаунчером остановки. Всё проверено дважды: прямым запуском install-linux.sh/uninstall-linux.sh в изолированной песочнице (не ~/.hermes) и через собранный dist/hermes-hub-setup.sh — тот самый файл, который уходит в релиз. Тесты: 738 -> 740 passed, 2 skipped, 4 deselected. Новый тест на .ico падает на прежней версии install-linux.sh (проверено git stash) и проходит после фикса. ruff check . чисто. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
49 lines
2.4 KiB
Bash
49 lines
2.4 KiB
Bash
#!/usr/bin/env bash
|
||
# ==============================================================================
|
||
# Hermes Hub — Stop (Linux)
|
||
#
|
||
# На Windows фоновый сервер запускается из HermesHubWeb.exe, который держит
|
||
# значок в системном трее — оттуда «Exit» останавливает процесс. На Linux
|
||
# сервер стартует через nohup и остаётся в фоне после закрытия окна браузера
|
||
# (так и задумано: не переустанавливать при каждом перезапуске окна), но
|
||
# остановить его после этого было решительно нечем — ни кнопки в интерфейсе
|
||
# (её нет ни на одной платформе), ни трея, ни пункта меню. Только терминал и
|
||
# pkill вручную, либо переустановка/удаление, которые останавливают хаб
|
||
# только как побочный эффект.
|
||
#
|
||
# Этот скрипт — тот недостающий эквивалент «Exit из трея»: доступен из меню
|
||
# приложений через собственный .desktop-пункт, использует ту же проверенную
|
||
# функцию остановки, что installer/install-linux.sh и uninstall-linux.sh.
|
||
# ==============================================================================
|
||
|
||
set -e
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
||
# Устанавливается рядом (в ~/.hermes/bin) install-linux.sh — оттуда и берём
|
||
# общую функцию. Если скрипт запущен не из установленного места (например,
|
||
# прямо из репозитория), ищем installer/ на уровень выше.
|
||
LIB=""
|
||
for candidate in \
|
||
"$SCRIPT_DIR/lib_stop_running_hub.sh" \
|
||
"$SCRIPT_DIR/../installer/lib_stop_running_hub.sh"
|
||
do
|
||
if [ -f "$candidate" ]; then
|
||
LIB="$candidate"
|
||
break
|
||
fi
|
||
done
|
||
|
||
if [ -z "$LIB" ]; then
|
||
echo "❌ Не найдена installer/lib_stop_running_hub.sh — переустановите Hermes Hub." >&2
|
||
exit 1
|
||
fi
|
||
|
||
# shellcheck source=../installer/lib_stop_running_hub.sh
|
||
. "$LIB"
|
||
|
||
echo "Останавливаю Hermes Hub..."
|
||
if stop_running_hub; then
|
||
exit 0
|
||
fi
|
||
exit 1
|