battery improvements and pc start
This commit is contained in:
7
battery_plot.py
Normal file
7
battery_plot.py
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import plotly.express as px
|
||||||
|
import pandas as pd
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
df = pd.read_csv(Path(Path.home(), "data/battery_monitor.csv"))
|
||||||
|
fig = px.line(df, x="time", y="percent", title="Battery Charge over Time")
|
||||||
|
fig.show()
|
||||||
@@ -8,12 +8,26 @@ https://community.frame.work/t/fingerprint-scanner-compatibility-with-linux-ubun
|
|||||||
|
|
||||||
## Revert Kernel (if needed)
|
## Revert Kernel (if needed)
|
||||||
|
|
||||||
|
With koji
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo dnf install koji
|
||||||
|
mkdir /tmp/kernel-download
|
||||||
|
cd /tmp/kernel-download
|
||||||
|
koji search build kernel-6.0.12*
|
||||||
|
koji download-build --arch=x86_64 kernel-6.0.12-300.fc37
|
||||||
|
sudo dnf install ./*.rpm
|
||||||
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Find the kernels you have installed
|
# Find the kernels you have installed
|
||||||
sudo rpm -qa kernel
|
sudo rpm -qa kernel
|
||||||
|
|
||||||
|
# List available kernels
|
||||||
|
sudo ls /boot | grep vmlinuz
|
||||||
|
|
||||||
# Revert to a previous kernel
|
# Revert to a previous kernel
|
||||||
grubby --set-default /boot/vmlinuz-5.14.10-300.fc35.x86_64
|
sudo grubby --set-default /boot/vmlinuz-5.14.10-300.fc35.x86_64
|
||||||
```
|
```
|
||||||
|
|
||||||
## Make DNF Fast
|
## Make DNF Fast
|
||||||
@@ -133,7 +147,7 @@ ansible-playbook --ask-become-pass ansible/framework_fedora.yml
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create an encrypted drive
|
# Create an encrypted drive
|
||||||
sudo cryptsetup luksFormat
|
sudo cryptsetup luksFormat /dev/sdb1
|
||||||
|
|
||||||
# LUKS Disk Encryption can use up to 8 key slots to store passwords. We can use these keys to auto mount LUKS device.
|
# LUKS Disk Encryption can use up to 8 key slots to store passwords. We can use these keys to auto mount LUKS device.
|
||||||
# cryptsetup luksDump /dev/sda
|
# cryptsetup luksDump /dev/sda
|
||||||
@@ -170,6 +184,24 @@ sudo cryptsetup luksOpen /dev/disk/by-uuid/1d7ce570-e695-47a0-9dda-5f14b5b20e21
|
|||||||
sudo cryptsetup luksClose backup0
|
sudo cryptsetup luksClose backup0
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Backup Disks
|
||||||
|
|
||||||
|
Backup disks will respect the following naming convention:
|
||||||
|
|
||||||
|
brand_size_purpose_year_month
|
||||||
|
|
||||||
|
So for a backup drive you would create:
|
||||||
|
|
||||||
|
`wd_4tb_backup_2023_01`
|
||||||
|
|
||||||
|
Or for an archive drive:
|
||||||
|
|
||||||
|
`samsung_1tb_archive_2023_01`
|
||||||
|
|
||||||
|
#### Disk Health
|
||||||
|
|
||||||
|
`smartctl -a /dev/sda`
|
||||||
|
|
||||||
### Create BTRBK Config
|
### Create BTRBK Config
|
||||||
|
|
||||||
`sudo vim /etc/btrbk/btrbk.conf`
|
`sudo vim /etc/btrbk/btrbk.conf`
|
||||||
@@ -388,3 +420,213 @@ sudo systemctl stop packagekit
|
|||||||
dconf write /org/gnome/software/allow-updates false
|
dconf write /org/gnome/software/allow-updates false
|
||||||
dconf write /org/gnome/software/download-updates false
|
dconf write /org/gnome/software/download-updates false
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Battery Life
|
||||||
|
|
||||||
|
```bash
|
||||||
|
grubby --args="nvme.noacpi=1" --update-kernel=ALL
|
||||||
|
```
|
||||||
|
|
||||||
|
Enable automatic power profile switching on AC/Battery
|
||||||
|
|
||||||
|
1. `sudo mkdir /lib/udev/power-profiles`
|
||||||
|
1. `sudo vim /lib/udev/power-profiles/power-saver`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
powerprofilesctl set power-saver
|
||||||
|
```
|
||||||
|
|
||||||
|
1. `sudo chmod +x /lib/udev/power-profiles/power-saver`
|
||||||
|
1. `sudo vim /lib/udev/power-profiles/performance`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
powerprofilesctl set performance
|
||||||
|
```
|
||||||
|
|
||||||
|
1. `sudo chmod +x /lib/udev/power-profiles/performance`
|
||||||
|
|
||||||
|
sudo vim /etc/udev/rules.d/10-power.rules
|
||||||
|
|
||||||
|
```bash
|
||||||
|
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/bin/bash /lib/udev/power-profiles/power-saver"
|
||||||
|
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/bin/bash /lib/udev/power-profiles/performance"
|
||||||
|
```
|
||||||
|
|
||||||
|
~~Calibrate with powertop~~
|
||||||
|
|
||||||
|
Powertop causes connection issues with USB while the computer is plugged in. Do not
|
||||||
|
recommend.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo dnf install powertop
|
||||||
|
# This will take a while
|
||||||
|
sudo powertop --calibrate
|
||||||
|
sudo powertop
|
||||||
|
```
|
||||||
|
|
||||||
|
~~Install and enable tlp~~
|
||||||
|
|
||||||
|
TLP seems to limit maximum performance. I'm leaving it here for posterity.
|
||||||
|
Stick with powertop and power profiles daemon.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo systemctl stop power-profiles-daemon.service
|
||||||
|
sudo systemctl disable power-profiles-daemon.service
|
||||||
|
sudo systemctl mask power-profiles-daemon.service
|
||||||
|
|
||||||
|
sudo dnf install tlp
|
||||||
|
sudo systemctl mask systemd-rfkill.service
|
||||||
|
sudo systemctl mask systemd-rfkill.socket
|
||||||
|
sudo systemctl enable tlp.service --now
|
||||||
|
sudo systemctl status tlp.service
|
||||||
|
```
|
||||||
|
|
||||||
|
### Simple Battery Monitoring App
|
||||||
|
|
||||||
|
alarm charge_full_design device power subsystem voltage_min_design
|
||||||
|
capacity charge_now hwmon2 present technology voltage_now
|
||||||
|
capacity_level current_now manufacturer serial_number type
|
||||||
|
charge_full cycle_count model_name status uevent
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo mkdir /etc/battery_monitor
|
||||||
|
sudo vim /etc/battery_monitor/battery_monitor.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
CSV_LOCATION="/home/ducoterra/data"
|
||||||
|
CSV_NAME="battery_monitor.csv"
|
||||||
|
BATTERY_DATA_LOCATION="/sys/class/power_supply/BAT1"
|
||||||
|
if [ ! -f $CSV_LOCATION/$CSV_NAME ];
|
||||||
|
then
|
||||||
|
mkdir -p $CSV_LOCATION;
|
||||||
|
echo "time,percent,charge_now,charge_full,voltage_now,current_now,cycle_count,status" > $CSV_LOCATION/$CSV_NAME
|
||||||
|
chown -R ducoterra:ducoterra $CSV_LOCATION
|
||||||
|
fi
|
||||||
|
time=$(date --iso-8601=seconds)
|
||||||
|
percent=$(cat $BATTERY_DATA_LOCATION/capacity)
|
||||||
|
charge_now=$(cat $BATTERY_DATA_LOCATION/charge_now)
|
||||||
|
charge_full=$(cat $BATTERY_DATA_LOCATION/charge_full)
|
||||||
|
voltage_now=$(cat $BATTERY_DATA_LOCATION/voltage_now)
|
||||||
|
current_now=$(cat $BATTERY_DATA_LOCATION/current_now)
|
||||||
|
cycle_count=$(cat $BATTERY_DATA_LOCATION/cycle_count)
|
||||||
|
status=$(cat $BATTERY_DATA_LOCATION/status)
|
||||||
|
|
||||||
|
echo "$time,$percent,$charge_now,$charge_full,$voltage_now,$current_now,$cycle_count,$status" >> $CSV_LOCATION/$CSV_NAME
|
||||||
|
```
|
||||||
|
|
||||||
|
`sudo vim /etc/systemd/system/battery_monitor.service`
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Unit]
|
||||||
|
Description=Records the current battery level
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/bin/bash /etc/battery_monitor/battery_monitor.sh
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
`sudo vim /etc/systemd/system/battery_monitor.timer`
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Unit]
|
||||||
|
Description=Run battery_monitor every 15 seconds
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnCalendar=*:*:0,15,30,45
|
||||||
|
AccuracySec=10sec
|
||||||
|
Persistent=true
|
||||||
|
Unit=battery_monitor.service
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
||||||
|
```
|
||||||
|
|
||||||
|
`sudo systemctl start battery_monitor.timer`
|
||||||
|
|
||||||
|
## Turn Off Fingerprint When Laptop Lid Closed
|
||||||
|
|
||||||
|
To disable fingerprint authentication when the laptop lid is closed, and re-enable when it is reopened, we will use acpid to bind to the button/lid.* event to a custom script that will stop and mask the fprintd service on lid close, and unmask and start the fprintd service on lid open.
|
||||||
|
|
||||||
|
We also check that the HDMI cable is connected by testing the contents of /sys/class/drm/card0-HDMI-A-1/status.
|
||||||
|
|
||||||
|
Follow the steps below:
|
||||||
|
|
||||||
|
1. Create a .locks file in your home dir: `mkdir ~/.locks`
|
||||||
|
1. Create file /etc/acpi/laptop-lid.sh with the following contents:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
lock=/home/ducoterra/.locks/fprint-disabled.lock
|
||||||
|
|
||||||
|
if grep -Fq closed /proc/acpi/button/lid/LID0/state # &&
|
||||||
|
# This is used to detect if a display is connected.
|
||||||
|
# For USB C displayport use:
|
||||||
|
# grep -Fxq connected /sys/class/drm/card1-DP-2/status
|
||||||
|
# For hdmi use:
|
||||||
|
# grep -Fxq connected /sys/class/drm/card0-HDMI-A-1/status
|
||||||
|
then
|
||||||
|
touch "$lock"
|
||||||
|
systemctl stop fprintd
|
||||||
|
systemctl mask fprintd
|
||||||
|
elif [ -f "$lock" ]
|
||||||
|
then
|
||||||
|
systemctl unmask fprintd
|
||||||
|
systemctl start fprintd
|
||||||
|
rm -f "$lock"
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Make the file executable with
|
||||||
|
|
||||||
|
`chmod +x /etc/acpi/laptop-lid.sh`
|
||||||
|
|
||||||
|
3. Create file /etc/acpi/events/laptop-lid with the following contents:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
event=button/lid.*
|
||||||
|
action=/etc/acpi/laptop-lid.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Restart the acpid service with:
|
||||||
|
|
||||||
|
`sudo service acpid restart`
|
||||||
|
|
||||||
|
Now the fingerprint will be used only when the lid is open.
|
||||||
|
|
||||||
|
In order to restore the correct state of the fprintd service if you disconnect/reconnect while the laptop is off, you may call the above script from a systemd init file. The steps to do this are the following:
|
||||||
|
|
||||||
|
1. Create a file named /etc/systemd/system/laptop-lid.service with the following contents:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[Unit]
|
||||||
|
Description=Laptop Lid
|
||||||
|
After=suspend.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/etc/acpi/laptop-lid.sh
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
WantedBy=suspend.target
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Reload the systemd config files with
|
||||||
|
|
||||||
|
`sudo systemctl daemon-reload`
|
||||||
|
|
||||||
|
3. Start the service with
|
||||||
|
|
||||||
|
`sudo systemctl start laptop-lid.service`
|
||||||
|
|
||||||
|
4. Enable the service so that it starts automatically on boot
|
||||||
|
|
||||||
|
`sudo systemctl enable laptop-lid.service`
|
||||||
|
|
||||||
|
Now the status should be correct even after connecting/disconnecting when the computer is off.
|
||||||
|
|||||||
20
framework_pc.md
Normal file
20
framework_pc.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Fedora Gaming PC
|
||||||
|
|
||||||
|
## RDP with autologin
|
||||||
|
|
||||||
|
https://askubuntu.com/questions/1396745/21-10-make-screen-share-password-permanent
|
||||||
|
|
||||||
|
### Autologin
|
||||||
|
|
||||||
|
1. Enable autologin from the gnome user settings
|
||||||
|
|
||||||
|
### Create an RDP keychain
|
||||||
|
|
||||||
|
1. Open "Passwords and Keys" app on the desktop. Password and Keys App
|
||||||
|
2. Create a new "Password Keyring" using the "+" icon. Create a new Password Keyring
|
||||||
|
3. Name the new keyring "Zero Security Keyring" or something that reminds you it will be un-encrypted. Leave the password blank so that the keychain is unencrypted. You will be warned that you are creating an unencrypted keychain.
|
||||||
|
4. Right-click on the new keyring and choose "set as default" Set the new keyring as the default
|
||||||
|
5. Click on the old "Default" keyring and delete "GNOME Remote Desktop RDP Credentials" Delete the old RDP password from the "Default keyring"
|
||||||
|
6. Open settings and set a new RDP password set a new RDP password
|
||||||
|
7. Check that the password was stored under the "Zero Security Keyring" Check that the RDP password was stored in the new keychain
|
||||||
|
9. Right click on "Default" keyring and choose "set as default" Remember to set "Default keyring" as the default
|
||||||
Reference in New Issue
Block a user