ThinkPad X220: Arch Linux Notes
UNDER CONSTRUCTION: The document is currently being modified! |
Customization
Keeping the Boot Log on TTY1
In order to stop Arch Linux from clearing the screen on boot we can add the i915 module to MODULES inside of /etc/mkinitcpio.conf and then regenerate our kernel images.
# sudo sed -i -r 's/^MODULES="([a-z0-9 _-]+)"/MODULES="\1 i915"/' /etc/mkinitcpio.conf # sudo mkinitcpio -p linux |
Then create a directory for getty overrides and create one with the following.
# sudo mkdir /etc/systemd/system/getty@tty1.service.d # sudo vim /etc/systemd/system/getty@tty1.service.d/noclear.conf |
[Service] TTYVTDisallocate=no |
Traditional Device Node Names
To translate the predictable device node names back into traditional ones, can create the following. You can use the vim command :r !cat /sys/class/net/wlp3s0/address, replacing the device node respectively, in order to get the MAC Address of each device.
# vim /etc/udev/rules.d/10-network.rules |
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="MAC_ADDRESS_FOR_NIC", NAME=="eth0" SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="MAC_ADDRESS_FOR_WIFI", NAME=="wlan0" |
Hardware
Battery/CPU
Install TLP and related packages. Then enable it with systemd, don't forget to mask the required services (skip NetworkManager if you use this).
# yaourt -S tlp tp_smapi acpi_call # sudo systemctl enable tlp # sudo systemctl enable tlp-sleep |
# sudo systemctl mask NetworkManager.service # sudo systemctl mask systemd-rfkill.service # sudo systemctl mask systemd-rfkill.socket |
TLP status can be shown with the following:
# sudo tlp-stat |
It is also a good idea to install PowerTOP in order to monitor power usage.
# yaort -S powertop |
CPU
First begin by installing cpupower and upower.
# yaourt -S cpupower upower |
Create udev rules for automatically changing the governor when the system is running.
# sudo vim /etc/udev/rules.d/powersave.rules |
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/usr/bin/laptopmode AC" SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/usr/bin/laptopmode BAT" |
Create a systemd service for adjusting the governor when returning from suspend.
# sudo vim /etc/systemd/system/root-resume.service |
[Unit] Description=Local system resume actions After=suspend.target [Service] Type=simple ExecStart=/usr/bin/laptopmode [Install] WantedBy=suspend.target |
Also create a systemd service for adjusting the governor on system boot-up.
# sudo vim /etc/systemd/system/power_management.service |
[Unit] Description=Sets the CPU governor on boot according to AC mode Requires=multi-user.target After=multi-user.target [Service] Type=oneshot RemainAfterExit=no ExecStart=/usr/bin/laptopmode [Install] WantedBy=multi-user.target |
Finally create the script itself to switch modes.
# sudo vim /usr/bin/laptopmode |
# #!/usr/bin/bash STATE="" BAT="BAT1" if [[ "$1" == "BAT" || "$1" == "AC" ]]; then STATE="$1" fi if [[ $STATE == "" ]]; then if [[ $(upower -i /org/freedesktop/UPower/devices/battery_$BAT | grep state | grep discharging) == "" ]]; then STATE="AC" else STATE="BAT" fi fi echo $STATE if [[ $STATE == "BAT" ]]; then echo "Discharging, set governor to powersave and disabled Turbo Boost" cpupower frequency-set -g performance cpupower frequency-set -f 2500MHz echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo elif [[ $STATE == "AC" ]]; then echo "AC plugged in, set governor to performance and enabled Turbo Boost" cpupower frequency-set -g performance cpupower frequency-set -f 3500Mhz echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo fi |
Fan Control
Install thinkfan, default configuration is installed into /usr/lib/modprobe.d/thinkpad_acpi.conf.
# yaourt -S acpi lm_sensors thinkfan |
Then detect the hardware monitors chips that are available. Then re-enable the thinkpad_acpi kernel module to update with the new config.
# sudo sensors-detect # sudo modprobe thinkpad_acpi |
To show the current thermal and cooling information use acpi.
# sudo acpi -V |
To show the current fan speed and level.
# sudo cat /proc/acpi/ibm/fan |
Make the changes to point it to the right temperature reading, you can use :r !sudo find /sys/devices -type f -name "temp*_input" in order to paste all the monitors into the file.
# sudo vim /etc/thinkfan.conf |
When finished it should look something like this:
hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp2_input hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp3_input hwmon /sys/devices/virtual/hwmon/hwmon1/temp1_input tp_fan /proc/acpi/ibm/fan (0, 0, 35) (1, 33, 38) (2, 36, 45) (3, 39, 49) (4, 46, 58) (5, 50, 62) (7, 56, 32767) |
You can verify the config is written correctly with the following command.
# sudo thinkfan -n |
Finally enable and start thinkfan.
# sudo systemctl enable thinkfan # sudo systemctl start thinkfan |
HDD/SSD
To monitor the HDD or SSD installed you need to install the smartmontools package.
# yaourt -S smartmontools |
You can view an overall health assessment with the following:
# sudo smartctl -H /dev/sdX |