В моем случае Caribou была моя проблема с перегревом :Запуск Linux Mint Cinnamon 19 на Asus i7 (Intel© Core™ i7 -ЦП 2670QM @ 2,20 ГГц × 4 ). Сильно перегревается, до 97С и вызывает сбои и замедления. В терминале я набрал команду top и обнаружил, что две программы используют ~100% или более процессорного времени :Thunderbird 52.9.1 и CARIBOU (программу виртуальной клавиатуры, которую я включил несколько недель назад. но не использовал ). T -bird сделал это после того, как я щелкнул, скажем, по электронной почте. Поэтому я пошел в МЕНЕДЖЕР ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, набрал CARIBOU в поле поиска и УДАЛИЛ его. Затем перезагрузился. Удивительно! Проблема решена :ЦП остыл, и T -птица вернулась к минимальной загрузке ЦП. Все, что я могу предположить, это то, что Карибу и Т -птица «сражались» друг с другом. (Кстати, одна подсказка заключалась в том, что в Win7 тот же ноутбук работал нормально, даже когда я нагрузил его одновременно видео и шахматами.)
Примечания :Впервые я узнал о проблеме перегрева, проверив файл var/log/syslog и из-за этого установил апплет Индикатор температуры ЦП , игнорируя предупреждение о вызове функции (пока проблем нет ). Использование системного монитора помогло мне проверить верхний процесс терминала, чтобы идентифицировать больших пользователей ЦП.
hostnamectl
входит в среду systemd и не выполняет системный вызов sethostname(2)
. Он просит systemd сделать это через сокет /run/dbus/system_bus_socket
. Поскольку systemd не изменил пространство имен, он выполняет это в исходном пространстве имен, изменяя имя старого пространства имен UTS (начального места, где он работает ), на новое предоставленное имя и оставляя новое Пространство имен UTS с неизменным именем (вопреки утверждению OP ):старое имя хоста. Будут и другие побочные эффекты, такие как изменение файла /etc/hostname
.
Это можно проверить с помощью strace
. Внутри нет sethostname(2)
, но видны связанные с systemd -элементы:
newfstatat(AT_FDCWD, "/run/systemd/system/", {st_mode=S_IFDIR|0755, st_size=40,...}, AT_SYMLINK_NOFOLLOW) = 0
Если предотвратить успешное выполнение вышеприведенного вызова (, используя unshare -f -u -m /bin/bash
, а затем покрыв внутри него все /run
с помощью mount -t tmpfs tmpfs /run
), получим:
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
Диалог позже осуществляется через сокет, открытый вот так:
connect(3, {sa_family=AF_UNIX, sun_path="/run/dbus/system_bus_socket"}, 30) = 0
В такой среде следует использовать низкоуровневую «устаревшую» команду hostname
, которая используется для чтения или изменения имени хоста. Он вызывает непосредственно системный вызов sethostname(2)
:, он изменит имя нового пространства имен UTS и оставит старое (начальное )пространство имен UTS без изменений:
hostname newhostname
Чтобы hostnamectl
повлиять на новое пространство имен UTS (, как и в случае с полным контейнером, запущенным с помощью LXC ), требуется нечто большее, чем unshare
команда :совершенно новый экземпляр systemd Система eco -должна присутствовать в новой среде, что, вероятно, потребует ввода/отмены нескольких других пространств имен и большого количества дополнительных шаблонов.