Since I have been asked quiet frequently about my Linux desktop setup, I decided to write about it. Do not expect this blog post to be a nicely written article. Instead, expect a collection of settings and tweaks that I use to create a comfortable Linux desktop environment.
Please note, that this post is work in progress and will be updated over time.
Hardware
I recently purchased the Lenovo Thinkpad X1 Carbon 6th gen. Read more about it here: /posts/2018-03-12-thinkpadx1c6/.
Other than this nice laptop, I have an external SAMSUNG UHD monitor and that’s about it.
Software
Linux distribution
Currently, I am running Fedora 27 on my Thinkpad X1, because it runs reliably on this very new hardware.
Desktop environment
My default desktop environment is the awesome i3 tiling window manager (https://i3wm.org/). It is a very stable product, allowing to work mainly with shortcuts. It ships a good default configuration, which does not require much tweaking for me. Thanks to its minimalistic approach, the GPU is always at ease. This leads to quiet fans and great battery life (much better compared to more feature rich environments, such as GNOME or KDE, etc.).
You can read more about my i3 setup here.
IBus (Intelligent Input Bus)
I need to switch the keyboard layout regularly. This is done best by utilizing IBUS. This is all you need to do in order to use it:
- install it:
dnf install ibus-setup
- configure it to run under i3:
exec --no-startup-id ibus-daemon --daemonize
After you re-login to your i3, you will notice a system tray. Right click it to configure keyboard layouts, shortcuts, etc.
External screen
Using i3, you will be doomed to make use of xrandr
to configure screens. Because I am lazy, I chose the very cool arandr
graphical front-end for xrandr
instead. It allows to configure your screen with different resolutions, layouts, etc. much like macOS or MS Windows.
A neat feature of arandr
is, that it allows you to save the configured screen layout. I did this with two layouts, screen-default
and screen-home
:
$ ls ~/.screenlayout/
screen-default.sh screen-home.sh
By default, arandr
suggests to save your layouts in your $HOME
path, which is exactly what I did.
arandr
saves your xrandr
configurations in ready-to-execute scripts. I use those scripts to configure my screen settings depending on my work environment (default
means that I use the laptop screen only, home
means that I have my SAMSUND UHD monitor attached to my laptop.. you get the idea). When I leave home and disconnect the external screen, I execute ~/.screenlayout/screen-default.sh
.
Using this approach, I have a small number of scripts ready to configure my screen every-time exactly the same way I want.
An example configuration (internal screen is default screen & external screen [via HDMI] is configured to be “above” default screen) generated by arandr
:
$ cat ~/.screenlayout/screen-home.sh
#!/bin/sh
xrandr --output HDMI-2 --off --output HDMI-1 --mode None --pos 0x0 --rotate \
normal --output DP-1 --off --output eDP-1 --primary --mode 2560x1440 --pos \
448x2160 --rotate normal --output DP-2 --off
WXHD (high dpi)
The Thinkpad X1C6 comes with a display resolution of 2560 x 1440 pixels. It looks really nice, but renders fonts, UI elements, etc. too small for my old eyes.
To solve this issue, I need to configure DPI settings of X11 (i3 uses pretty much all functionality of X11 instead of re-implementing it, like many other desktop environments):
cat ~/.Xresources
Xft.dpi: 140 # default is 220, which is too small
Other than that, I only needed to configure two other tools: Thunderbird and VirtualBox.
Using Thunderbird, install the No Small Text
addon and configure the minimum font size.
With VirtualBox, I had no trouble with the GUI, but the guest VMs interface. All I needed to do is configure the Scale Factor
via VM window -> View -> Scale Factor -> 125%.
Input
I prefer tap-to-click with the Trackpad. Tap-to-click can be enabled as following:
xinput list # list input devices
xinput list-props "SynPS/2 Synaptics Touchpad" # list trackpad input options
xinput set-prop "SynPS/2 Synaptics TouchPad" "libinput Tapping Enabled" 1 # set trackpad tap to click input option
Power management
For power management and battery life optimization, I use powertop
to create a tuned
profile:
dnf install tuned-utils
powertop2tuned new_profile_name
tuned-adm profile new_profile_name
systemctl enable tuned
systemctl start tuned
By the way, I always use powertop with all options enabled (--enable
), even if not recommended. I did this (USB auto suspend, etc.) for the last ten years, without experiencing stability issues. However, use this flag at your own risk. You have been warned :wink:.
For further power management settings, I use the xfce4-power-manager
:
- install it:
dnf install xfce4-power-manager
- configure i3:
exec --no-startup-id /usr/bin/xfce4-power-manager
- configure
xfce4-power-manager
via system tray
Network management
For network management, I use network manager
, which is shipped by default on Fedora and many other distributions. I access network manager
through nm-applet
:
- configure i3:
exec --no-startup-id /usr/bin/nm-applet
- configure network through
nm-applet
system tray
Screen lock
To lock the screen on i3, I use i3lock:
install the package:
dnf install i3lock
configure i3:
bindsum $mod+l exec /usr/bin/i3lock -c 000000
- using this configuration, I can lock my screen with SUPER+l, just like Windows users lock their screens
In order to have a locked screen on resume from suspend, I use the following
systemd
configuration (don’t forget to setUser=
to your username):[Service] User=USERNAME Type=forking Environment=DISPLAY=:0 ExecStart=/usr/bin/i3lock -c 000000 [Install] WantedBy=sleep.target
Enable the configuration:
systemctl enable i3lock
.bashrc
tbd