Framework 12 setup
Last update
2025-09-22
2025
09-22
«fw12»

0. Setup

  • Boot menu & BIOS: repeatly press F2 at boot time
  • Battery % cut-off: BIOS > Advanced> Battery charge limit = 86%
  • FN+Esc = swap Function/Multimedia keys (persistent across reboots)

1. Windows (see dedicated post)


2. Linux (Debian 13 release notes)

2.1 Initial setup

  • apt install git && cd /etc && git init .
    • echo /cups/subscriptions.conf* > .gitignore
    • git add . && git commit -m "initial setup"
  • apt install aptitude screen mc micro ncdu elinks curl
  • setup NetworkManager
  • generate ssh keys
  • copy micro configuration
  • copy /opt/bashrc.sh, ~/.gitconfig, ~/.screenrc
  • config X session for root & user
  • config grub:
    • echo "GRUB_TIMEOUT=3" >> /etc/default/grub.d/local.cfg
    • echo "GRUB_BACKGROUND=xxxx.png" >> /etc/default/grub.d/local.cfg
    • update-grub
  • install systemd-units:
    • tmpfs-folders + mkdir a && mount --bind / a & clean ondisk /tmp and /var/log
    • vc-mounter + apt install ruby linux-cpupower (see veracrypt post & hp)
  • config /etc/apt/sources.list:
    • disable deb-src rows
    • add backports deb http://deb.debian.org/debian/ trixie-backports main contrib non-free non-free-firmware
  • install chrome, vivaldi, firefox (hp)
1
2
3
4
5
6
apt purge firefox-esr ; apt install firefox
update-alternatives --config www-browser         # elinks
update-alternatives --config x-www-browser       # firefox
update-alternatives --config gnome-www-browser   # firefox
update-alternatives --config x-session-manager   # startxfce4
update-alternatives --config x-terminal-emulator # xfce4-terminal
1
2
3
4
5
6
7
8
9
10
key="95C0FAF38DB3CCAD0C080A7BDC78B2DDEABC47B7"
# download key via GPG...
gpg --keyserver keyserver.ubuntu.com --recv-key $key
# ...or via wget if command fails
wget -O - "http://keyserver.ubuntu.com/pks/lookup?op=get&fingerprint=on&search=0x#key" | gpg --import
# save key and add repo
gpg --armor --export $key > /etc/apt/trusted.gpg.d/r-cran.asc`
echo "deb [signed-by=/etc/apt/trusted.gpg.d/r-cran.asc]" \
  "http://cloud.r-project.org/bin/linux/debian trixie-cran40/" \
  > /etc/apt/sources.list.d/r-cran.list
  • config cryptsetup and disable hybernation
  • disable speech-dispatcher auto spawn:
    • sed -r -i 's/^# (DisableAutoSpawn)/\1/' /etc/speech-dispatcher/speechd.conf
  • config lightdm:

    • enable tap to click by adding Option "Tapping" "on" within the section containing Identifier "libinput touchpad catchall" in /etc/X11/xorg.conf.d/40-libinput.conf
    • set in /etc/lightdm/lightdm-gtk-greeter.conf`:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    background=/opt/wallpapers/moon.jpg
    xft-antialias=true
    xft-dpi=140
    xft-hintstyle=hintfull
    xft-rgba=none
    indicators=~spacer;~clock;~a11y;~spacer;~session;~power
    a11y-states=+keyboard
    keyboard=onboard -l Small -t Ambiance -s 1200x350
    clock-format=%A %d %B %Y | %H:%M
    position=43% 41%
    hide-user-image=true
    default-session=xfce4-session
    
    • set in /etc/lightdm/lightdm.conf:
    1
    2
    allow-user-switching=false
    allow-guest=false
    

2.2 Software

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# compression
apt install 7zip 7zip-rar brotli pigz pixz unrar-free unzip

# multimedia
apt install ffmpeg ogmtools mediainfo mencoder \
  mkvtoolnix mkvtoolnix-gui easytag id3v2 mp3gain mpg123 twolame \
  mplayer mpv sox asunder genisoimage audacity cuetools

# graphics
apt install geeqie mcomix dia gimp gimp-data-extras imagemagick \
  inkscape exiftran exiv2 jhead jpeginfo pngcrush webp xchm \
  zbar-tools flpsed pdftk-java foliate qpdfview unpaper

# shell
apt install fish peco cbonsai cmatrix pipes-sh tty-clock dialog duf \
  expect fdupes geoip-bin gftp hexedit mutt ncal parallel patchelf \
  strace htop pinfo pv ripgrep smemstat tidy tree units uuid yudit

# programming
apt install build-essential default-jdk kakasi libkakasi2-dev nodejs \
  npm gitg golang sqlite3 sqlitebrowser jq \
  geany geany-plugin-addons geany-plugin-autoclose geany-plugin-codenav \
  geany-plugin-lineoperations geany-plugin-miniscript geany-plugin-treebrowser

# services/daemons
apt install dnsmasq haveged nullmailer nfs-kernel-server \
  tigervnc-standalone-server tigervnc-viewer autocutsel

# networking (`ipcalc` replaces `gip`)
apt install mosh net-tools ncat netcat-openbsd netcat-traditional \
  netselect nmap openvpn wireguard openresolv? remmina swaks whois \
  mailutils mtr-tiny oathtool blueman bluetooth bluez ipcalc socat ufw

# disk
apt install gparted dos2unix tofrodos davfs2 ntfs-3g sshfs exfat-fuse \
  f2fs-tools iotop-c mtools gsmartcontrol mdadm pmount squashfs-tools

# x11/xorg, tools
apt install evtest xdotool zenity xloadimage xpdf galculator galternatives \
  keepassxc-full kpcli pwgen icewm caffeine

# fonts
apt install  ttf-mscorefonts-installer fonts-noto-cjk fonts-noto-color-emoji \
  fonts-cantarell fonts-cascadia-code fonts-clear-sans fonts-freefont-otf \
  fonts-inconsolata fonts-sil-gentium fonts-sil-gentium-basic \
  fonts-unifont xfonts-unifont

# office (use **aptitude** and EXCLUDE: fonts-noto-extra libreoffice-sdbc-*)
libreoffice hunspell-it hyphen-it

2.3 Configuration

  • accented letters
  • nullmailer (replaces exim4)
  • wireguard
  • dnsmasq + freeDNS
  • smartd
  • sudo
  • ufw firewall
  • XFCE autostart applets:
    • Settings > Session and startup > Application autostart: Blueman, Caffeine, Clipman, Remmina, caffeine-indicator
  • XFCE - disable light-locker + custom locking:
    • Settings > Session and startup > Application autostart > uncheck light-locker
    • apt install xfce4-screensaver & configure it to lock screen after 15' of inactivity
    • Settings > Power manager > System tab > Security: check Lock screen when system is going to sleep
  • XFCE font DPI: settings manager > appearance > fonts tab > check Custom DPI setting 110
  • TODO set display brightness on boot: archlinux, light, brightnessctl, systemd-backlight

2.4 Optional unpackaged 😢️ software

2.5 XFCE Tablet mode

1
2
3
xrandr --output eDP-1 --rotate normal
xrandr --output eDP-1 --rotate right
xrandr --output eDP-1 --rotate inverted
1
2
3
4
5
6
7
8
9
10
11
xinput | sort  # detect your device IDs
# PIXA3854:00 093A:0239 Touchpad
# ILIT2901:00 222A:5539

xinput set-prop 'Device ID' 'Coordinate Transformation Matrix' <bits>

# where <bits> depends on screen rotation mode:
#   normal  :  1  0  0  0  1  0  0  0  1
#   inverted: -1  0  1  0 -1  1  0  0  1
#   right   :  0  1  0 -1  0  1  0  0  1
#   left    :  0 -1  1  1  0  0  0  0  1
1
2
3
4
5
6
7
8
9
10
echo "\
/* Set thickness of scrollbars */
scrollbar.vertical   slider { min-width:  16px; }
scrollbar.horizontal slider { min-height: 16px; }\
" > ~/.config/gtk-3.0/gtk.css

echo "\
[Settings]
gtk-overlay-scrolling = false\
" > ~/.config/gtk-3.0/settings.ini

3. Miscellanea

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# systemd unit to be ran at boot
[Unit]
Description=Swap Fn and Meta with ectool
DefaultDependencies=no
After=local-fs.target
Before=sysinit.target

# Swap Fn and Meta keys on a Framework laptop
# Fn:   (2,2), scancode 0xFF
# Meta: (3,1), scancode 0xE01F
#   https://www.howett.net/data/framework_matrix
#   https://www.howett.net/posts/2021-12-framework-ec/#3e0c---keyboard-mapping
#   https://community.frame.work/t/exploring-the-embedded-controller/12846/9
[Service]
Type=oneshot
ExecStart=/usr/local/bin/ectool raw 0x3E0C d2,d1,b2,b2,wE01F,b3,b1,wFF
RemainAfterExit=yes

[Install]
WantedBy=sysinit.target