Balyn Omavel

Minisforum MS-01 — enabling voltage and fan metrics (Nuvoton NCT6798D)

By default, on Proxmox kernel 6.8.12-15-pve, only CPU/NVMe temperatures are available. sensors-detect —auto finds only coretemp, no Super I/O support. The hardware (Nuvoton NCT6798D) requires the NCT6775 driver, which is not included in this kernel build.

Driver patching and installation

  1. Install build tools and kernel headers
sudo apt update
sudo apt install build-essential
sudo apt install proxmox-headers-$(uname -r)
Preparing to unpack .../proxmox-headers-6.8.12-15-pve_6.8.12-15_amd64.deb ...
Unpacking proxmox-headers-6.8.12-15-pve (6.8.12-15) ...
Setting up proxmox-headers-6.8.12-15-pve (6.8.12-15) ...
  1. Download the NCT6775 driver

⚠️ Do not use the abandoned killghost fork.
Instead, use the damix1/nct6775 repo, which can be patched for newer chips.

git clone https://github.com/damix1/nct6775.git /root/nct6775
cd /root/nct6775
  1. Patch for Nuvoton NCT6798D support

Edit nct6775.c. Extend the enum:

enum kinds { nct6106, nct6775, nct6776, nct6779,
             nct6791, nct6792, nct6793, nct6795,
             nct6796, nct6798 };

Add names:

static const char * const nct6775_device_names[] = {
    "nct6106", "nct6775", "nct6776", "nct6779",
    "nct6791", "nct6792", "nct6793", "nct6795",
    "nct6796", "nct6798",
};

static const char * const nct6775_sio_names[] __initconst = {
    "NCT6106D", "NCT6775F", "NCT6776D/F", "NCT6779D",
    "NCT6791D", "NCT6792D", "NCT6793D", "NCT6795D",
    "NCT6796D", "NCT6798D",
};

Add detection case:

switch (val & SIO_ID_MASK) {
    ...
    case 0xd42:   /* NCT6798D */
        sio_data->kind = nct6798;
        break;
}

This minimal patch makes the driver recognize NCT6798D.

  1. Build and install
make clean
make
CC [M]  /root/nct6775/nct6775.o
/root/nct6775/nct6775.c: In function 'is_word_sized':
/root/nct6775/nct6775.c:1335:9: warning: enumeration value 'nct6798' not handled in switch [-Wswitch]
 1335 |         switch (data->kind) {
      |         ^~~~~~
/root/nct6775/nct6775.c: In function 'nct6775_update_pwm_limits':
/root/nct6775/nct6775.c:1706:17: warning: enumeration value 'nct6798' not handled in switch [-Wswitch]
 1706 |                 switch (data->kind) {
      |                 ^~~~~~
/root/nct6775/nct6775.c: In function 'store_auto_pwm':
/root/nct6775/nct6775.c:3137:17: warning: enumeration value 'nct6798' not handled in switch [-Wswitch]
 3137 |                 switch (data->kind) {
      |                 ^~~~~~
/root/nct6775/nct6775.c: In function 'nct6775_probe':
/root/nct6775/nct6775.c:4322:9: warning: enumeration value 'nct6798' not handled in switch [-Wswitch]
 4322 |         switch (data->kind) {
      |         ^~~~~~
/root/nct6775/nct6775.c:4355:17: warning: enumeration value 'nct6798' not handled in switch [-Wswitch]
 4355 |                 switch (data->kind) {
      |                 ^~~~~~
/root/nct6775/nct6775.c: In function 'pwm_update_registers':
/root/nct6775/nct6775.c:2633:17: warning: this statement may fall through [-Wimplicit-fallthrough=]
 2633 |                 nct6775_write_value(data, data->REG_TARGET[nr],
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 2634 |                                     data->target_temp[nr]);
      |                                     ~~~~~~~~~~~~~~~~~~~~~~
/root/nct6775/nct6775.c:2636:9: note: here
 2636 |         default:
      |         ^~~~~~~
  MODPOST /root/nct6775/Module.symvers
  CC [M]  /root/nct6775/nct6775.mod.o
  LD [M]  /root/nct6775/nct6775.ko
  BTF [M] /root/nct6775/nct6775.ko
Skipping BTF generation for /root/nct6775/nct6775.ko due to unavailability of vmlinux

Then:

make install
cp nct6775.ko /lib/modules/6.8.12-15-pve/kernel/drivers/hwmon
depmod -a -F /boot/System.map-6.8.12-15-pve 6.8.12-15-pve

It copies nct6775.ko into hwmon/ so the kernel can autoload it.

Then:

depmod -a
modprobe nct6775
  1. After loading the module, verify with sensors
nct6798-isa-0a20
Adapter: ISA adapter
in0:                   400.00 mV (min =  +0.00 V, max =  +1.74 V)
in1:                     1.05 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in2:                     3.34 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in3:                     3.34 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in4:                     1.09 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in5:                   152.00 mV (min =  +0.00 V, max =  +0.00 V)
in6:                   136.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM
in7:                     3.34 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in8:                     3.14 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in9:                     1.02 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in10:                  160.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM
in11:                  128.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM
in12:                  1000.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM
in13:                  152.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM
in14:                    1.27 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
fan1:                  2205 RPM  (min =    0 RPM)
fan2:                  1732 RPM  (min =    0 RPM)
fan3:                     0 RPM  (min =    0 RPM)
fan4:                     0 RPM  (min =    0 RPM)
fan5:                     0 RPM  (min =    0 RPM)
fan7:                     0 RPM  (min =    0 RPM)
...
  1. Add the driver to /etc/modules so it loads automatically on reboot
echo nct6775 | tee -a /etc/modules
  1. Regenerate the initramfs images
update-initramfs -u -k all

Handling secure boot (if enabled)

Unsigned modules will fail with modprobe: ERROR: could not insert ’nct6775’: Key was rejected by service.

  1. Generate your own MOK key
openssl req -new -x509 -newkey rsa:2048 \
  -keyout /root/MOK.priv -outform DER -out /root/MOK.der \
  -nodes -days 36500 -subj "/CN=MyKernelModule/"
  1. Sign the module
/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \
  /root/MOK.priv /root/MOK.der \
  /lib/modules/$(uname -r)/kernel/drivers/hwmon/nct6775.ko
  1. Import the key and reboot
mokutil --import /root/MOK.der
reboot

⚠️ On reboot the blue MOK Manager screen will appear → Enroll MOK → Continue → enter password.

  1. Validation
modinfo nct6775 | grep signer
signer: MyKernelModule

Post scriptum

Node Exporter (should be runned with —collector.hwmon) will expose new metrics as:

node_hwmon_in_volts{chip="nct6798-isa-0a20",sensor="in1"}
node_hwmon_fan_rpm{chip="nct6798-isa-0a20",sensor="fan1"}

Grafana hwmon dashboard should catch these metrics automatically.

NBcooler для Orange Pi

NBcooler Радиатор для Orange Pi 5/5B из меди
Купить: https://aliexpress.ru/item/1005005926704535.html

Отзыв в одной картинке:

Стрес-тест s-tui, 30 мин.
NBcooler с 6 пластинами, Orange Pi 5B (RK3588S SoC). Шума нет.
Комплектные термопрокладки не подходят, нужны более толстые (расстояние около 3.5 мм до чипов памяти).

UE_FBX_Exporter

A slightly improved script by Tom Shannon (previously named TS_UE4FBXExporter).

  • Tested with UE5.
  • Added sanitizing for illegal object symbols.

What’s it let you do?

  • Export each selected mesh to an individual FBX file
  • Move each mesh to 0,0,0 for export (Then put it back where it belongs when it’s done like my kids NEVER DO!)
  • Name Each FBX according to the MAX scene name
  • Allows you to use a grid object to set an arbitrary origin (For really big scenes)
  • Just make a Grid helper and name it UE4_Grid and the script will detect it
  • Copy the location, position and scale or selected objects to the clipboard using Unreal-friendly syntax allowing you to paste thousands of objects objects into your UE4 maps with a couple of clicks!

Download: https://github.com/mammuthus/3ds-max-scripts/blob/main/UE_FBX_Exporter.ms

How to install: TBD

Как получить Flipper Zero в Армении?

⚠️ Описывается процедура, которая на данный момент неактуальна, т. к. некоторые шаги были изменены со стороны властей Армении. За уточнениями пишите в Flipper Zero Armenian Community.

Гайд основан на этом мануале и на собственном опыте. Некоторые моменты из оригинального гайда мне показались неочевидными и непоследовательными, посему я решил сделать вариант для slow guys.

Он относится только к получению Microsoft без дополнительных аксессуаров и плат. Процедура получения флиппера с отладочной платой отличается и может быть уточнена в Flipper Zero Armenian Community. Отдельно флиппер растаможить/получить невозможно, если устройство с платой идут в одном отправлении.

Итак, после посещения отделения №0013 (там располагается и таможенное окно), вас отправят получать разрешение (лицензию) на импорт радиочастотных средств (ЛИРС).
О прохождении этого квеста и пойдет речь далее.

Шаг 0. Подготовка документов

Перед началом, у вас на руках должны быть следующие документы:

  1. Инвойс покупки Flipper Zero
    Запросить можно у support@flipperdevices.com.
    Я просил в USD, но вариант с HKD (гонконгский доллар) тоже подойдет.
  2. Нотариальный перевод паспорта
    Делается в любой нотариальной конторе, цена в районе ֏3000-5000. Я ходил в Шенгавит, там нет очередей. Перевод обязательно нужно проверять через транслятор/Google Lens сразу после получения, бывают ошибки/опечатки.
  3. Технические параметры девайса
    Скачать тут
  4. Квитанция об оплате государственной пошлины за лицензию
    Через интернет-банк IDBank я способов оплатить не нашел, так что пошел ногами в Арарат Банк (отделение Кентрон). Он удобен тем, что работает до 20, а не до 18 как остальные. Кстати, записаться можно через приложение EarlyOne (категория «Бюджетные платежи») чтобы долго не торчать в очереди. Арарат возьмет комиссию ֏300, если вы не их клиент.
    Всегда лучше платить в кассе, т. к. в этом случае вы получите нормальный документ с печатью банка.
Номер счета для оплаты 900005000857
Сумма ֏1000
Цель платежа Получение разовой лицензии на ввоз радиочастотного оборудования

Цель платежа вводится на армянском.
И чтобы оператор долго не думала, можете показать ей это:

Մանգամյա լիցենզիայի ստացման վճար հադիոսարքավորումներ ներմուծելու

Именно так мне перевели цель платежа в Арарате, и с такой формулировкой я в итоге успешно получил Flipper.

Требования к файлам

⚠️ Каждый документ должен быть в отдельном PDF-файле.
⚠️ Каждый файл не более 3 Мб.
⚠️ Если документ многостраничный, то каждая страница не должна превышать 200 Кб.

Каждую страницу каждого документа необходимо подписать. Я сделал это в Sejda, просто написал имя и фамилию прописным шрифтом:

И откомпрессить PDF-ки через Ghostscript, либо в онлайне.

Шаг 1. Получение доступа к Национальному единому окну в сфере внешней торговли РА

Все операции с документами и получением лицензий совершаются на сайте trade.gov.am
Для получения доступа, нужно написать письмо в произвольной форме на адрес trade@customs.am, приложив копию своего паспорта и указав цель получения.

Добрый день!
Прошу выдать доступ к Национальному единому окну в сфере внешней торговли РА, а именно к разделу “Лицензия на импорт радиочастотных средств (ЛИРС)”
Копия паспорта в приложении к письму.
Спасибо.

Ответ с логином и паролем приходит довольно быстро — кому-то в течение пары часов, а мне буквально через 5 минут. Никаких дополнительных вопросов не задавали.

Шаг 2. Создание архива и отправка документов в Едином окне

Дальше надо залогиниться в «Единое окно» по адресу trade.gov.am и в разделе «Сервисы» найти категорию «Объединённый архив документов»

Далее нажимаем «Создать архив»
Наименование: Документы для ЛИРС
Описание: в соответствии с содержимым
Нажимаем «Сохранить»

После сохранения, вы автоматически проваливаетесь в этот архив.
Далее через кнопку «плюс» добавляем 4 новые строки и заполняем инфу по документам:

Для всех документов:

Вид 09999
Номер 1, 2, 3, 4
Дата документа Я заполнил текущей датой без оглядки на то, есть на документе таймстамп или нет
Описание Описание документа

После этого, у каждого документа надо прожать галочку, и поля перестанут быть редактируемыми. Теперь у каждого документа есть «карандаш». Нажимаем и подгружаем соответствующую PDF-ку к каждому документу.

Для всех документов:

Тип Natural Person
УНН/Паспорт Вводите «00», автоматом подгрузится «Մորամ Աբբաս Փուռ» (пекарня Морам Аббас), но это не должно вас смущать, это особенность системы :)

Далее прожать «Сохранить» в каждом доке, снова зайти в каждый док через «карандаш» и прожать «Отправить». Статус документов изменится на «Отправленный».

Шаг 3. Запрос лицензии

Выходим на главную страницу, далее «Сервисы», далее раздел «Лицензия на импорт радиочастотных средств»

Нажимаем «Создать»

Вкладка «Основная»

Срок действия Текущая дата плюс 1 месяц (можно больше — это срок, в который вы должны успеть получить девайс)
Страна-экспортер HK Гонконг (но я почему-то сделал CN Китай и тоже прокатило)
Валюта Указываем валюту из инвойса, у меня USD
Дата курса Я почему-то поставил январь, но рекомендуется ставить дату инвойса

Вкладка «Стороны»

Сведения об импортере

Номер паспорта Ввести свой номер паспорта
Имя-фамилия Заполнить
Адрес Вписать почтовый адрес, на который оформлена посылка

Сведения об экспортере

Страна HK Гонконг
Наименование Flipper Devices Inc
Адрес 1 Sky Plaza Rd, Chek Lap Kok

Вкладка «Товары»

Добавить новую строку через «плюс»

Код по ТН ВЭД 84713000000
Дополнительное описание Платформа для разработки, модель Flipper Zero
Страна происхождения US
Количество Указать количество флипперов в посылке
Стоимость По инвойсу. Я указал полную сумму инвойса (т. е. устройство + доставка)

Вкладка «Документы»

Тут есть волшебная выпадайка «Добавить документы из архива».
Открываем, далее просто без фильтров нажимаем «Поиск», должен найтись ваш свежесозданный архив. Ставим четыре галки, нажимаем «Добавить документы», и все документы из архива упадут в тело текущего запроса.

А теперь нужно добавить еще 4 пустые строки.
Это нужно для официальных сертификаций, которые загружены не будут, но упомянуты быть должны.

Код документа тот же: 09999.
В номерах и датах указать:

ЕАЭС N RU Д-US.РА02.В.01824/22 22/02/2022
ЕАЭС N RU Д-US.РА02.В.01582/22 22/02/2022
RU0000055249 11/01/2022
Д-ИВРД-9550 23/03/2022

? Теперь можно отправлять заявку. Кстати, кнопка «Обновить» сохраняет и обновляет.

Завершение

Ждать аппрува придется, по отзывам, 1-2 дня.
Никаких уведомлений вы не получите, нужно самому заходить в заявку на ЛИРС и следить за ее статусом.

Есть провалиться в саму заявку, можно увидеть ее расширенный статус на вкладке «Заметки»

После того, как заявка будет одобрена, статус изменится на «Выданный» и вы сможете нажать кнопку «Распечатать», сохранив разрешение в виде PDF.

? Возвращаемся в отделение №0013 с полным пакетом документов, забираем дельфина и идем отмечать успешный успех. Кстати, они работают и в субботу до 14:00, а их телефон — 010305556 (доп. 4)

🇦🇲 Из Армении

Фред Гургенович Африкян
Выдержки из альбома «Искусство шрифта», 1984

Fred Africkian
«The Art Of Letter-Type» extracts, 1984

CIM Studio

Это инструмент от Microsoft для дебага WMI — он позволяет просматривать классы, пространства имен, методы. Тулза довольно старая, на сайте MS её уже не найти (раньше поставлялась в составе WMI SDK).

Скачать WMI Tools: 5Мб

После установки WMI SDK, надо добавить в файл studio.htm, в секцию head следующий код:

<meta http-equiv="X-UA-Compatible" content="IE=8" />

По умолчанию файл находится в \Program Files (x86)\WMI Tools\
Работает только в Internet Explorer.

? Выкройки-раскройки

Это большой архив с выкройками, часть из них раньше распространялась платно

Пример выкройки, автор: Craftsmangus

Скачать: 7z-архив, 180Мб

Мастера:
Craftsmangus — сайт, инста
HahnsAtelier — инста
Jas Leather — инста
Leodis leather — сайт, инста
LZpattern — сайт
Maju T works — инста
MikoCraft — инста
OU Object — инста
Studio Hael — инста
Сorter — сайт, инста

Web Transaction Recorder

Чуваки из SolarWinds поспешили навесить ярлык «deprecated» на свою старую недоделку Web Transaction Recorder, хотя новый рекордер совершенно не готов к использованию в проде и покрывает только элементарные юзкейсы.
Тем не менее, его приходится использовать, ибо в составе Orion других решений нет. В общем, если обмазать старые костыли красивым интерфейсом, конфетки не выйдет, но некий профит из этого можно извлечь.

Если раньше аутентификация через Active Directory Federation Services впиливалась руками в xml-код транзакции, то теперь сам рекордер запросит у тебя креды при записи транзакции. Удобно. Запросит-то он запросит, а вот то, что FS передает кучу параметров в url, рекордера не волнует. Он запишет именно тот url, который был на момент записи. Вместе с таймстампом wct, вместе с уникальными wctx и client-request-id.

То биш, в следующий раз, когда вы решите запустить транзакцию, вы столкнетесь с совершенно логичным

Authentication failed. 
Invalid credentials for тут%20у%20нас%20длинный%20урл%20со%20всеми%20параметрами 
Click the Key icon to update.

Не поспоришь, для этого wct и request-id креды действительно не валидны. Key icon тут, кстати, не поможет, потому что не позволяет исправить сам url.

Что делать?

Просто убрать уникальные параметры, оставив целевой url в wtrealm и запулить его в goto. И перезаписать транзакцию заново, конечно. Спасибо, SolarWinds.

Так выглядит goto

? Севен Хиллс Перечный-Копченый

Никогда не любил крафт, потому что большая часть крафта это APA/IPA. А это штука несложная, поэтому и варят на каждом углу. Ну, кроме того, что я просто не люблю горечь Pale Ale. В общем, мнение о крафте в целом сформировалось именно из-за ипы.

И тут я как-то зашел в Хищник Стейкс&Бургерс. Стейки не ел, бургеры неплохие, но что самое главное — Seven Hills Percheny Kopcheny на кране. Пьется легко, особенно под классические пивные закуски. Замечательный копченый аромат.

Вообще-то попробовать его можно много где, но я пробовал тут и мне прям очень понравилось. Настолько, что пишу об этом в бложеке. Это не реклама бара, это реклама крутого пиваса, если что.

Ранее Ctrl + ↓