When running NBFC for the first time, you need to give it a configuration file for your laptop model.
If you are lucky, sudo nbfc config --set auto will find a matching one and set it.
sudo nbfc config --recommend (requires dmidecode) will give a list of configuration files that may match your laptop.
With sudo nbfc config --set <MODEL> a configuration is selected.
sudo nbfc start will start the service.
It can be queried by sudo nbfc status -a.
If you wish nbfc_service to get started on boot, use sudo systemctl enable nbfc_service.
Differences in detail
Files
NBFC Mono
NBFC Linux
Systemd service file
nbfc.service
nbfc_service.service
EC Probing tool
ec-probe
ec_probe
Notebook configuration files
/opt/nbfc/Configs/*.xml
/usr/share/nbfc/configs/*.json
Service binary
/opt/nbfc/nbfcservice.sh
/bin/nbfc_service
PID File
/run/nbfc.pid
/run/nbfc_service.pid
State file
-
/run/nbfc_service.state.json
Config file
?
/etc/nbfc/nbfc.json
The original NBFC service is queried and controlled by the client using TCP/IP. - NBFC Linux does not implement any "real" IPC. Information about the service can be queried by reading its state file. The client controls the service by simply rewriting its configuration file and reloading it.
The original NBFC service adjusts the fan speeds in intervals of EcPollIntervall according to TemperatureThresholds. - NBFC Linux directly sets the fan speed (also according to TemperatureThresholds).
The original NBFC service selects a TemperatureThreshold and applies its FanSpeed when the temperature exceeds its UpThreshold. In contrast, NBFC Linux will select the next TemperatureThreshold and apply its FanSpeed when the temperature exceeds the currentUpThreshold. The provided config files have been reconfigured to account for this change, so that they provide the same behaviour as the original NBFC service. If you have a custom config file that works well with the original service, you can port it to NBFC Linux using the provided tool (requires python3-lxml).
NBFC Linux dropped the Autostart option, since it relies on the systemd service file only.
Troubleshooting
The preferred way of running nbfc is using the ECSysLinux implementation, which depends on the ec_sys kernel module.
There is also an alternative implementation which uses /dev/port, called ec_linux.
It can be specified on the commandline using --embedded-controller=ec_linux and permanently set in /etc/nbfc/nbfc.json with "EmbeddedControllerType": "ec_linux".
Many Linux distributions do not provide the ec_sys module, and the module should be compiled manually. Alternatively, the acpi_ec module can be used. The acpi_ec module comes with a DKMS config script, which automatically rebuilds the acpi_ec module when a new kernel is installed and supports running NBFC with Secure Boot and Lockdown Kernel. To compile with the acpi_ec module, use the command:
make EMBEDDED_CONTROLLER=acpi_ec
Shell autocompletion
NBFC-Linux comes with shell completion scripts for bash, fish and zsh.
~ $ nbfc_service <TAB>
--config-file -c -- Use alternative config file (default /etc/nbfc/nbfc.json)
--debug -d -- Enable tracing of reads and writes of the embedded controller
--embedded-controller -e -- Specify embedded controller to use
--fork -f -- Switch process to background after sucessfully started
--help -h -- show this help message and exit
--readonly -r -- Start in read-only mode
--state-file -s -- Write state to an alternative file (default /var/run/nbfc_service.state.json)
~ $ nbfc <TAB>
config -- List or apply configs
help -- Show help
restart -- Restart the service
set -- Control fan speed
start -- Start the service
status -- Show the service status
stop -- Stop the service
请发表评论