Dokumentation

Wie ich i3wm barrierefrei konfiguriert habe

i3wm ist ein Tiling Window Manager für Linux. Ich erkläre, wie ich ihn für mich persönlich halbwegs barrierefrei konfiguriert habe.

Dieser Beitrag dokumentiert meine persönlichen Einstellungen für den Tiling Window Manager i3 und dessen Ökosystem, die ihn für mich als sehbehinderte Power-Userin (einigermaßen) nutzbar machen. Bitte beachtet, dass ich Linux und i3wm als meine Daily Driver abgelöst und im Juni 2022 wieder durch macOS ersetzt habe. Vielleicht gibt es jetzt bessere Optionen oder die hier beschriebenen sind nicht mehr kompatibel.

Ebenso ist das auch explizit keine Anleitung für andere Menschen mit Sehbehinderung, sondern mehr eine Dokumentation meiner persönlichen Erfahrungen und Einstellungen, sodass ich sie wieder nachvollziehen kann, wenn ich mein System einmal neu einrichten sollte.

Wie ich i3 verwende

Zunächst einmal nutze ich i3 nicht wegen seiner Tiling-Features, sondern wegen der effizienten Möglichkeiten zum Starten/Schließen von Anwendungen und für die unkomplizierten Workspaces. Ich habe selten mehr als ein Fenster pro Arbeitsbereich, und wenn doch, verwende ich den Tab-Modus (als eine Art Unter-Workspaces), sodass jedes im Vollbildmodus angezeigt wird.

Derzeit verwende ich einen 42-Zoll-Fernseher von Samsung mit 1920x1080 Pixeln als Monitor, mit einem Betrachtungsabstand von etwa 40 cm. Für kleinere Geräte empfehle ich auf jeden Fall, andere Werte zu wählen oder sogar die Auflösung ganz zu verringern. Für meinen 14-Zoll-Laptop verwende ich eine Auflösung von 1280x720 und etwas kleinere Schriftgrößen.

Generell würde ich empfehlen, eine vollwertige Desktop-Umgebung zu wählen die für die meisten alltäglichen Aufgaben einen Vollbildzoom bietet, Dafür fand ich den Cinnamon-Desktop recht angenehm. Sollte ein Screen Reader notwendig sein, funktioniert der MATE-Desktop wahrscheinlich am Besten.

Beide sind nicht ansatzweise ideal und auch i3 könnte sicherlich viel komfortabler sein, die Möglichkeit zum Vollbildzoom in i3wm gäbe. Im Moment genieße ich aber die Geschwindigkeit von i3 und navigiere mich im System vor allem über mein Wissen über die Art und Weise, wie ich es konfiguriert habe. Ich weiß, wo meine Fenster sind, ohne nachzusehen. Und Keyboard-Shortcuts sind großartig!

Zusätzliche Tools

Ich habe mir ein Skript entwickelt, das einen Screenshot macht und dann im Vollbild mit dem Bildbetrachter "feh" öffnet. Darin kann ich dann sofort, ohne großen Zeitversatz, mit der Maus scrollen und verschiedene Bereiche betrachten. Leider aktualisiert sich der Inhalt nicht live, aber um kleinen statischen Text zu lesen reicht es aus.

Des Weiteren nutze ich ein weiteres selbstgeschriebenes Skript, das mir bei verschiedenen Events, die i3 auslöst, eine Audio-Ausgabe gibt. So weiß ich zum Beispiel, wenn ein anderes Fenster den Fokus erhält, oder wenn ein Fenster geschlossen wird.

Konfiguration der grafischen Oberfläche

Da ich hauptsächlich Linux Mint verwende, das mit dem Cinnamon Desktop und einigen Dienstprogrammen geliefert wird, verwende ich diese, um ein dunkles Thema auszuwählen (das mit dem System gebündelt ist und wird automatisch auf GTK- und Qt-Anwendungen angewendet). Firefox zeigt sogar Websites im dunklen Modus an, wenn dies unterstützt wird.

Konfiguration von X.org

Ich erstelle eine .Xresources Datei in meinem Home-Verzeichnis mit folgendem Inhalt: Xcursor.size: 50 Dadurch wird der Cursor größer, sodass ich ihn besser sehen kann. Manchmal tausche ich auch das Standard-X11-Cursorthema gegen ein weißes, das in Mint enthalten ist. Beides erfordert einen Neustart von X11, um wirksam zu werden.

Konfiguration von i3

Die meisten Anpassungen beziehen sich (neben meinem Hochkontrast-Farbschema) auf die Schriftgrößen: # Window title font font pango:DejaVu Sans Mono 22 Für dmenu benutze ich die 'monospace-36' Schriftart und für i3status kommt 'pango:DejaVu Sans Mono 24' zum Einsatz.

Nur die dmenu-Schrift ist groß genug, so dass ich sie mit meinem normalen Betrachtungsabstand einigermaßen lesen kann, und das auch nur, wenn ich weiß, was ich erwarten kann (was ich normalerweise tue, wenn ich dmenu starte). Bei den anderen Elementen muss ich mich ziemlich weit nach vorne lehnen, um zu wissen, was sie bedeuten, aber wenn ich sie noch größer machen würde, bräuchten sie viel mehr Platz auf dem Bildschirm.

Ich erstelle auch Verknüpfungen zum Starten und Beenden des Orca-Screenreaders, damit er immer da ist, wenn ich ihn brauche.

Ich habe mich dagegen entschieden, mein aktuelles Farbschema hier zu dokumentieren. Man sollte Farben wählen, die zur eigenen Situation passen, und ich ändere ändere meine häufig. Es gibt ein Tool, mit dem man die Farben leichter ändern kann, aber es ist nicht wirklich barrierefrei.

Desktop-Benachrichtigungen

Ich benutze dunst für Notifications. Die Standard-Schrift ist leider winzig, und es ist schwierig, das Tool zu konfigurieren. Hier ist also meine `~/.config/dunst/dunstrc`: [global] font = DejaVu Sans Mono 36 geometry = "500x5-30-20" word_wrap = true separator_height = 10 padding = 20 frame_width = 5 frame_color = "#aaaaaa" separator_color = frame sort = yes markup = full format = "%s %p\n%b" alignment = left icon_position = left max_icon_size = 128 icon_path = /usr/share/icons/gnome/32x32/status/:/usr/share/icons/gnome/32x32/devices/ text_icon_padding = 15 monitor = mouse progress_bar = true progress_bar_height = 30 progress_bar_max_width = 500 [urgency_low] background = "#333333" foreground = "#ffffff" [urgency_normal] background = "#222222" foreground = "#ffffff" [urgency_critical] background = "#000000" foreground = "#ffffff" Sie erhöht die Schriftgröße und den Farbkontrast und platziert die Benachrichtigungen in der unteren rechten Ecke des Bildschirms. Außerdem werden Programm-Symbole aktiviert damit ich leichter erkennen kann, von welchem Programm eine Benachrichtigung kommt und ob ich sie lesen sollte.

App-Launcher

Seit einiger Zeit mag ich den rofi Application Launcher lieber als dmenu. Ich verwende das mitgelieferte Monokai-Theme mit einer großen Schrift und fünf angezeigten Zeilen. Diese Optionen können geändert werden, nachdem man die Standardkonfigurationsdatei von rofi erzeugt und der Befehl rofi-theme-selector ausgeführt wird. configuration { modi: "window,drun,run,ssh,combi"; /* width: 50;*/ lines: 5; /* columns: 1;*/ font: "mono 28"; /* bw: 1;*/ /* location: 0;*/ /* padding: 5;*/ /* yoffset: 0;*/ /* xoffset: 0;*/ /* fixed-num-lines: true;*/ show-icons: true; /* terminal: "rofi-sensible-terminal";*/ /* ssh-client: "ssh";*/ /* ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";*/ /* run-command: "{cmd}";*/ /* run-list-command: "";*/ /* run-shell-command: "{terminal} -e {cmd}";*/ /* window-command: "wmctrl -i -R {window}";*/ /* window-match-fields: "all";*/ /* icon-theme: ;*/ /* drun-match-fields: "name,generic,exec,categories";*/ /* drun-show-actions: false;*/ /* drun-display-format: "{name} [({generic})]";*/ disable-history: true; /* ignored-prefixes: "";*/ /* sort: false;*/ /* sorting-method: ;*/ /* case-sensitive: false;*/ /* cycle: true;*/ /* sidebar-mode: false;*/ /* eh: 1;*/ /* auto-select: false;*/ /* parse-hosts: false;*/ /* parse-known-hosts: true;*/ combi-modi: "window,ssh,run,drun"; /* matching: "normal";*/ /* tokenize: true;*/ /* m: "-5";*/ /* line-margin: 2;*/ /* line-padding: 1;*/ /* filter: ;*/ /* separator-style: "dash";*/ /* hide-scrollbar: false;*/ /* fullscreen: false;*/ /* fake-transparency: false;*/ /* dpi: -1;*/ /* threads: 0;*/ /* scrollbar-width: 8;*/ /* scroll-method: 0;*/ /* fake-background: "screenshot";*/ /* window-format: "{w} {c} {t}";*/ /* click-to-exit: true;*/ /* show-match: true;*/ /* theme: ;*/ /* color-normal: ;*/ /* color-urgent: ;*/ /* color-active: ;*/ /* color-window: ;*/ /* max-history-size: 25;*/ /* combi-hide-mode-prefix: false;*/ /* matching-negate-char: '-' /* unsupported */;*/ /* cache-dir: ;*/ /* pid: "/run/user/1000/rofi.pid";*/ /* display-window: ;*/ /* display-windowcd: ;*/ /* display-run: ;*/ /* display-ssh: ;*/ /* display-drun: ;*/ /* display-combi: ;*/ /* display-keys: ;*/ /* kb-primary-paste: "Control+V,Shift+Insert";*/ /* kb-secondary-paste: "Control+v,Insert";*/ /* kb-clear-line: "Control+w";*/ /* kb-move-front: "Control+a";*/ /* kb-move-end: "Control+e";*/ /* kb-move-word-back: "Alt+b,Control+Left";*/ /* kb-move-word-forward: "Alt+f,Control+Right";*/ /* kb-move-char-back: "Left,Control+b";*/ /* kb-move-char-forward: "Right,Control+f";*/ /* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/ /* kb-remove-word-forward: "Control+Alt+d";*/ /* kb-remove-char-forward: "Delete,Control+d";*/ /* kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";*/ /* kb-remove-to-eol: "Control+k";*/ /* kb-remove-to-sol: "Control+u";*/ /* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/ /* kb-accept-custom: "Control+Return";*/ /* kb-accept-alt: "Shift+Return";*/ /* kb-delete-entry: "Shift+Delete";*/ /* kb-mode-next: "Shift+Right,Control+Tab";*/ /* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/ /* kb-row-left: "Control+Page_Up";*/ /* kb-row-right: "Control+Page_Down";*/ /* kb-row-up: "Up,Control+p,ISO_Left_Tab";*/ /* kb-row-down: "Down,Control+n";*/ /* kb-row-tab: "Tab";*/ /* kb-page-prev: "Page_Up";*/ /* kb-page-next: "Page_Down";*/ /* kb-row-first: "Home,KP_Home";*/ /* kb-row-last: "End,KP_End";*/ /* kb-row-select: "Control+space";*/ /* kb-screenshot: "Alt+S";*/ /* kb-ellipsize: "Alt+period";*/ /* kb-toggle-case-sensitivity: "grave,dead_grave";*/ /* kb-toggle-sort: "Alt+grave";*/ /* kb-cancel: "Escape,Control+g,Control+bracketleft";*/ /* kb-custom-1: "Alt+1";*/ /* kb-custom-2: "Alt+2";*/ /* kb-custom-3: "Alt+3";*/ /* kb-custom-4: "Alt+4";*/ /* kb-custom-5: "Alt+5";*/ /* kb-custom-6: "Alt+6";*/ /* kb-custom-7: "Alt+7";*/ /* kb-custom-8: "Alt+8";*/ /* kb-custom-9: "Alt+9";*/ /* kb-custom-10: "Alt+0";*/ /* kb-custom-11: "Alt+exclam";*/ /* kb-custom-12: "Alt+at";*/ /* kb-custom-13: "Alt+numbersign";*/ /* kb-custom-14: "Alt+dollar";*/ /* kb-custom-15: "Alt+percent";*/ /* kb-custom-16: "Alt+dead_circumflex";*/ /* kb-custom-17: "Alt+ampersand";*/ /* kb-custom-18: "Alt+asterisk";*/ /* kb-custom-19: "Alt+parenleft";*/ /* kb-select-1: "Super+1";*/ /* kb-select-2: "Super+2";*/ /* kb-select-3: "Super+3";*/ /* kb-select-4: "Super+4";*/ /* kb-select-5: "Super+5";*/ /* kb-select-6: "Super+6";*/ /* kb-select-7: "Super+7";*/ /* kb-select-8: "Super+8";*/ /* kb-select-9: "Super+9";*/ /* kb-select-10: "Super+0";*/ /* ml-row-left: "ScrollLeft";*/ /* ml-row-right: "ScrollRight";*/ /* ml-row-up: "ScrollUp";*/ /* ml-row-down: "ScrollDown";*/ /* me-select-entry: "MousePrimary";*/ /* me-accept-entry: "MouseDPrimary";*/ /* me-accept-custom: "Control+MouseDPrimary";*/ } @import "/usr/share/rofi/themes/Monokai.rasi"

Browser-Einstellungen

Ich habe meine Browser (vor allem Firefox) mit einer Standard-Zoomstufe von 170 % eingestellt, gehe aber häufig weit darüber hinaus. Die meisten Websites sind heutzutage responsive, so dass das selten ein Problem ist. Das gilt auch für die Electron-Anwendungen, die ich verwende am meisten: Discord, Spotify, Ferdi und VS Code.

Andere Tools

Als Terminal verwende ich gnome-terminal. Ich erstelle zwei Farbprofile (ein helles und ein dunkles) und gebe jedem von ihnen einen i3 Verknüpfung, so dass ich beide sofort zur Verfügung habe, je nachdem, was für die aktuelle Beleuchtungssituation am besten passt.

Probleme mit diesem Setup

Ich verwende meinen Monitor im "Gaming-Modus", um die Latenz zu verringern, da ich diese als sehr störend empfinde. Leider funktioniert das aber nur im "Standard"-Farbprofil des Fernsehers, wodurch viele Farben (z. B. hellere Grautöne) völlig unsichtbar werden. Für Grafikarbeiten (oder zum Testen von Anwendungen mit veränderten Farben) habe einen zweiten Monitor, der diese Probleme nicht hat, oder ich schaue mir die Sachen einfach mit dem Handy an.

Außerdem kann ich einige Konfigurationen, die ich gerne vornehmen würde, gar nicht vornehmen, da die Tools sie (noch) nicht unterstützen - zum Beispiel die i3 Nagbar.