Framework 12 setup
Last update
2025-09-22
2025-09-22
«fw12»
0. Setup
- Boot menu & BIOS: repeatly press
F2at 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.cfgecho "GRUB_BACKGROUND=xxxx.png" >> /etc/default/grub.d/local.cfgupdate-grub
- install systemd-units:
- config
/etc/apt/sources.list:- disable
deb-srcrows - add backports
deb http://deb.debian.org/debian/ trixie-backports main contrib non-free non-free-firmware
- disable
- 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 |
- add repo deb-multimedia
- add repo mkvtoolnix
- add repo docker ce
echo '{ "log-driver": "local" }' > /etc/docker/daemon.json
- add repo R-cran
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 containingIdentifier "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
- enable tap to click by adding
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
- Settings > Session and startup > Application autostart: Blueman, Caffeine, Clipman, Remmina,
- 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
- MoonlightQt streaming: use x64 AppImage from github releases
- Hack Nerd Font: see install guide
- Vmware Workstation Pro (free)
- rclone: install latest.deb
- GoCryptFS
- Thunderbird
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 |
- touchpad/touchscreen remapping after screen rotation:
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 |
- scrollbars always show + bigger size:
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 |
- Settings > Thunar > Behavior > Navigation > Single click to activate items
- onboard on-screen keyboard:
apt install onboard- Settings > Session and Startup > Application Autostart > uncheck Onboard, add
onboard -s 1200x350 - Settings > Xfce Screensaver > Lock Screen > enable On Screen Keyboard > command:
/usr/bin/onboard -e -l Small -t Ambiance - Onboard Preferences:
- > General: Start Onboard hidden, Show when unlocking the screen
- > Window > Transparency: Window=30, No background, When inactive=80 after=1s
- > Layout > Core layouts > Full Keyboard
- > Theme > Ambiance
- Settings > Session and Startup > Application Autostart > uncheck Onboard, add
- TODO touchégg + touché: multi-touch gesture recognizer for touchscreen and touchpad
- see also:
3. Miscellanea
- customer support
- size: 28.7 x 21.38 x 1.9 cm
- parts:
- wallpapers
- Power config via TLP (r1, r2)
- FrameWork 13 widget to set battery limits
- FrameWork 13 swap Fn-Meta keys via ectool
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 |
