18 KiB
System-Konfiguration
Host-Hardware
- CPU: Intel Core i9-14900HX
- Hostname: kr-nb-1003
Festplatten
nvme0n1 (2 TB) — Ventoy
nvme0n1p1— Ventoy NTFS-Partition (VMs), UUID:98FA5A9DFA5A7808, Label: "Ventoy"nvme0n1p2— VTOYEFI (FAT16), UUID:3105-B091- Unter Windows als
D:\verfügbar, unter Linux als/mnt/ventoy(Auto-Mount via fstab) - Wichtig: Das Raw-Device
/dev/nvme0n1p1kann unter CachyOS nicht direkt gemountet werden (Can't open blockdev), weil Ventoy es über den Device-Mapper belegt. Stattdessen muss/dev/mapper/nvme1n1p1verwendet werden (Device-Mapper-Name weicht von physischem Device ab!). - fstab:
/dev/mapper/nvme1n1p1 /mnt/ventoy ntfs3 rw,uid=1000,gid=1000,nofail 0 0 - Symlink:
~/projects→/mnt/ventoy/projects
nvme1n1 (1 TB) — Windows
nvme1n1p1— BOOT/EFI (FAT32), UUID:9EAB-CAFAnvme1n1p2— MSR (reserviert)nvme1n1p3— Windows (NTFS), UUID:D086AC4D86AC363E, Label: "Windows" — Schnellstart deaktiviertnvme1n1p4— Recovery (NTFS)- Mountpoint unter Linux:
/mnt/windows
CachyOS VM (über Ventoy gebootet)
- OS: CachyOS (Arch-basiert, rolling release)
- Kernel: linux-cachyos (PREEMPT_DYNAMIC) + linux-cachyos-lts
- Virtualisierung: VirtualBox VM
- 14 vCPUs, 12 GB RAM
- 250 GB Disk (sda), BTRFS mit Subvolumes
- zram-Swap (11,6 GB)
- Desktop: KDE auf Wayland
- Shell: zsh (umgestellt von fish wegen fehlender POSIX-Kompatibilität — kein Heredoc, abweichende Syntax bei Online-Snippets)
- Prompt: Powerlevel10k (
~/.p10k.zsh) - Config:
~/.zshrc→ lädt/usr/share/cachyos-zsh-config/cachyos-config.zsh(oh-my-zsh, fzf, git) - Plugins:
zsh-autosuggestions,zsh-syntax-highlighting(bereits via CachyOS-Config aktiv — fish-äquivalentes Erlebnis)
- Prompt: Powerlevel10k (
- Init: systemd (mit plymouth)
- Sprache: Deutsch
SSH-Keys (gemeinsam mit Windows)
- Quelle:
C:\Users\d-chrka\.ssh\(unter Linux:/run/media/chk/Windows/Users/d-chrka/.ssh/) - Kopiert nach:
~/.ssh/(CachyOS) - Keys:
id_ed25519,chrka_ed25519,id_rsa(jeweils mit.pub) - Bei Änderungen auf einer Seite müssen die Keys manuell synchronisiert werden
- known_hosts fehlt nach Ersteinrichtung — Die Keys werden von Windows kopiert, aber
known_hostsnicht. SSH-Verbindungen schlagen mit "Host key verification failed" fehl, bis die Host-Keys manuell hinzugefügt werden (z.B.ssh-keyscan -p 2211 gitssh.straso.com >> ~/.ssh/known_hosts)
Git-Konfiguration
- user.name: Christian Kauer
- user.email: c.kauer@krah-gruppe.de
- Übernommen aus der Windows-Konfiguration (
/run/media/chk/Windows/Users/d-chrka/.gitconfig)
OneDrive (rclone bisync)
- Paket:
rclone(über pacman) - Remote:
onedrive:(Typ: OneDrive Business, Drive: "Dokumente") - SharePoint-URL:
https://krahgruppe-my.sharepoint.com/personal/c_kauer_krah-gruppe_de1/Documents - Synchronisierter Ordner:
onedrive:cachyos_windows_share↔~/OneDrive/cachyos_windows_share - Modus:
bisync(bidirektional) — Änderungen werden in beide Richtungen synchronisiert - Automatisierung: systemd-User-Timer (
rclone-onedrive.timer), alle 10 Minuten- Service:
~/.config/systemd/user/rclone-onedrive.service - Timer:
~/.config/systemd/user/rclone-onedrive.timer
- Service:
- Ersteinrichtung:
rclone bisync ... --resyncnötig um Baseline zu erstellen - Hinweis:
onedrive-abraunegg(nativer Client) wurde ebenfalls installiert, aber nicht konfiguriert — OAuth-Redirect wurde vom Browser als Phishing blockiert
Sophos SSL VPN
- Server:
rcdro1.krah-gruppe.de:8443(UDP) - Benutzer:
d-chrka@internal.lan(AD-User, nichtc.kauer@krah-gruppe.de) - Verschlüsselung: AES-128-CBC, Auth SHA256
- Authentifizierung: Zertifikat + Benutzername/Passwort + 2FA (OTP wird ans Passwort angehängt)
- CA: Landata It-Solutions, Olpe (Sophos_CA_C330ACYPTCKJ3CA, gültig bis 2036-12-31)
- Client-Zertifikat: muss auf
d-chrka@internal.lanausgestellt sein (gültig bis 2036-12-31) - Funktionierendes Profil:
sslvpn-fixed.ovpn(vom Testgerät DR-NB-0142 übernommen) - Paket:
networkmanager-openvpn
Einrichtung unter Linux (NetworkManager)
- Profil importieren:
nmcli connection import type openvpn file sslvpn-fixed.ovpn - Wichtig — Split-Tunneling aktivieren: IPv4 → Routes → "Use this connection only for resources on its network" (Häkchen setzen), sonst geht aller Traffic durch den Tunnel und Internet fällt aus
- DNS-Routing konfigurieren — ohne diesen Schritt werden Firmen-Hostnamen nicht aufgelöst (systemd-resolved routet DNS-Queries sonst über den lokalen Router statt über den VPN-Tunnel):
Dasnmcli connection modify sslvpn-fixed ipv4.dns-search "~krah-gruppe.de,~internal.lan,~krah.intranet.de,~hirsau.seuffer,~resistec.pri,~krahicenet.local" nmcli connection modify sslvpn-fixed ipv4.dns 172.21.20.201~-Prefix markiert die Domains als Routing-Domains, sodass systemd-resolved Queries für diese Domains übertun0(172.21.20.201) schickt. - Verbinden:
nmcli connection up sslvpn-fixed
Hinweise zum .ovpn-Profil (Sophos-Download vs. funktionierende Version)
Das vom Sophos-Portal heruntergeladene Profil (sslvpn-c.kauer@krah-gruppe.de-client-config_V2-clients.ovpn) funktioniert nicht unter Linux. Entscheidende Unterschiede zur funktionierenden sslvpn-fixed.ovpn:
| Problem | Original-Download | Fixed |
|---|---|---|
| Client-Zertifikat (Hauptursache) | Ausgestellt auf c.kauer@krah-gruppe.de |
Ausgestellt auf d-chrka@internal.lan |
route remote_host ... |
Aktiv → NM-Import schlägt fehl | Auskommentiert |
script-security 2 |
Fehlt | Vorhanden |
Die Firewall authentifiziert über AD als d-chrka@internal.lan. Ein Zertifikat für c.kauer@krah-gruppe.de wird mit AUTH_FAILED abgelehnt (sichtbar im Firewall Log Viewer unter "SSL VPN Authentication"). Die Original-Downloads (V2/V3) vom Sophos-Portal liegen weiterhin unter ~/OneDrive/cachyos_windows_share/, werden aber nicht verwendet.
DNS-Konfiguration (Split-DNS: Firmen-DNS + öffentlicher DNS)
- Problem: Die Firmen-DNS-Server (
172.21.20.201/202/210), die via DHCP vom VirtualBox-Host kommen, können bestimmte CNAME-Ketten nicht vollständig auflösen (z.B.streams.radio21.de→streamurls.streamabc.link→ NXDOMAIN). Betroffen sind u.a. Audio-Streaming-Dienste. - Ursache: Die Sophos-Firewall/DNS-Resolver des Firmennetzwerks filtert oder blockiert bestimmte Domains (
.streamabc.link,.streamabc.net). - Lösung: Split-DNS via
systemd-resolved— Firmen-Domains gehen zum Firmen-DNS, alles andere zu öffentlichen DNS-Servern. - Wichtig: Alle DNS-Server auf einem Link zu mischen funktioniert nicht —
systemd-resolvedprobiert bei NXDOMAIN nicht den nächsten Server. Split-DNS erfordert getrennte Scopes (Link vs. Global).
1. Öffentlicher DNS als globaler Default
- Datei:
/etc/systemd/resolved.conf.d/public-dns.conf
[Resolve]
DNS=9.9.9.9#dns.quad9.net 1.1.1.1#cloudflare-dns.com
printf '[Resolve]\nDNS=9.9.9.9#dns.quad9.net 1.1.1.1#cloudflare-dns.com\n' | sudo tee /etc/systemd/resolved.conf.d/public-dns.conf
sudo systemctl restart systemd-resolved
2. Firmen-DNS nur für Firmen-Domains (Routing-Domains auf der Kabelverbindung)
nmcli connection modify "Kabelgebundene Verbindung 1" ipv4.dns-search "~krah-gruppe.de,~internal.lan,~krah.intranet.de,~hirsau.seuffer,~resistec.pri,~krahicenet.local"
nmcli connection up "Kabelgebundene Verbindung 1"
Resultat
| Domain | DNS-Server | Quelle |
|---|---|---|
*.krah-gruppe.de, *.internal.lan etc. |
172.21.20.201 (Firmen-DNS via DHCP) | Link-Routing-Domains |
| Alles andere | 9.9.9.9, 1.1.1.1 (Quad9, Cloudflare) | Globaler DNS (resolved.conf) |
- VPN-Koexistenz: Wenn
sslvpn-fixedaktiv ist, übernehmen die VPN-Routing-Domains auftun0den Firmen-DNS für interne Auflösung — gleiche Domains, anderer Link
Kurzname-Auflösung (Search Domains vs. Routing Domains)
- Problem: Firmen-Hostnamen wie
krah-invoicewerden über VPN nicht aufgelöst — nur der FQDNkrah-invoice.krah.intranet.defunktioniert. - Ursache:
~krah.intranet.de(mit~-Prefix) ist nur eine Routing-Domain — DNS-Queries für*.krah.intranet.dewerden an den Firmen-DNS geleitet, aber kurze Hostnamen werden nicht automatisch ergänzt. Dafür braucht systemd-resolved eine Search Domain (ohne~). - Lösung: NetworkManager-Dispatcher-Script, das beim VPN-Connect automatisch die Search Domain setzt:
- Datei:
/etc/NetworkManager/dispatcher.d/10-vpn-search-domain
#!/bin/bash INTERFACE="$1" ACTION="$2" if [[ "$INTERFACE" == "tun0" && "$ACTION" == "vpn-up" ]]; then resolvectl domain tun0 krah.intranet.de ~internal.lan ~krah-gruppe.de ~hirsau.seuffer ~resistec.pri ~krahicenet.local fi- Rechte:
chmod 755(muss ausführbar sein, sonst ignoriert NM das Script) krah.intranet.deohne~= Search Domain, der Rest mit~= Routing Domains
- Datei:
- Manuell (falls Dispatcher nicht greift):
sudo resolvectl domain tun0 krah.intranet.de '~internal.lan' '~krah-gruppe.de' '~hirsau.seuffer' '~resistec.pri' '~krahicenet.local'- Hinweis: Die
~-Zeichen müssen in zsh/fish mit Anführungszeichen escaped werden ('~...'), da die Shell sie sonst als Home-Directory interpretiert.
- Hinweis: Die
- Verifikation:
resolvectl statusprüfen — beim tun0-Link musskrah.intranet.deohne~erscheinen
Sophos Endpoint (Protection for Linux)
- Paket: Sophos Protection for Linux (SPL), installiert unter
/opt/sophos-spl - Service:
sophos-spl.service(systemd) - Sophos Central: Gerät registriert als
kr-nb-1003, Online - Kernel-Einschränkung: RuntimeDetections-Plugin unterstützt max Kernel 6.18.x — erfordert
linux-cachyos-lts(6.18.19). Der reguläre Kernel (6.19.x) ist zu neu und führt zuFATAL Kernel version check failed. - Default-Kernel: LTS in GRUB als Default setzen:
GRUB_DEFAULT="gnulinux-advanced-...-lts-advanced-..."in/etc/default/grub - SafeStore: Verzeichnis
/opt/sophos-spl/plugins/av/var/safestore/fehlte nach Installation, manuell angelegt
DataGrip (JetBrains)
- Config:
~/.config/JetBrains/DataGrip2025.3/(Einstellungen, Datasources, Konsolen, JDBC-Treiber, Keymaps) - Projekte:
~/DataGripProjects/(SQL-Konsolen und Scratch-Dateien pro Datasource) - Passwörter: verschlüsselt in
c.kdbx, nicht portierbar — müssen nach Migration neu eingegeben werden
Migration von Rechner A nach B
# Auf Rechner B:
# 1. Config kopieren (Windows → Linux)
cp -r "<Windows>/Users/<user>/Anwendungsdaten/JetBrains/DataGrip2025.3/"* ~/.config/JetBrains/DataGrip2025.3/
# 2. Projekte kopieren
cp -r "<Windows>/Users/<user>/DataGripProjects" ~/DataGripProjects
# Linux → Linux: Pfade sind ~/.config/JetBrains/DataGrip<version>/ und ~/DataGripProjects/
NAS (Synology DS920+)
- Hostname:
nas.straso.com - SSH/SFTP-Port: 2218
- Zugriff via Dolphin:
sftp://nas.straso.com:2218in der Adressleiste - Hinweis: SFTP muss in der DSM-Weboberfläche aktiviert sein (Systemsteuerung → Dateidienste → FTP → SFTP)
SAP GUI for Java
- Version: 8.10 rev 10
- Installation:
/home/chk/SAPClients/SAPGUI8.10rev10/ - Start:
GDK_SCALE=2 /home/chk/SAPClients/SAPGUI8.10rev10/bin/guilogon - Java: OpenJDK 25 (pacman:
jre-openjdk) - HiDPI-Scaling:
GDK_SCALE=2als Umgebungsvariable beim Start setzen - Installer-Hinweis: Installation muss aus dem Unterverzeichnis
com/sap/platin/micro/gestartet werden (java -cp ".:*" com.sap.platin.micro.Microkernel), da der Installer einen Pfadfehler hat
Remote Desktop Manager
- Paket:
remote-desktop-manager(pacman), Start:/usr/bin/remotedesktopmanager - RDP-Client:
freerdpv3 — liefert nurxfreerdp3, aber RDM erwartetxfreerdp - Symlink nötig:
sudo ln -s /usr/bin/xfreerdp3 /usr/bin/xfreerdp - NLA-Problem: Der eingebaute RDP-Client von RDM (Devolutions SSPI-Modul) scheitert an NLA/SPNEGO-Authentifizierung unter Linux. Workaround: In der Verbindung unter Authentication → "Enable Network Level Authentication (NLA)" deaktivieren
Citrix Workspace App
- Paket:
icaclient(AUR, via paru) - StoreFront:
https://apps.krah-gruppe.de(extern via Gateway) /https://apps.krah.intranet.de(intern) - Auth: Domain + RSA (2FA)
SSL-Zertifikate
System-Zertifikate verlinken, sonst schlagen SSL-Verbindungen fehl:
sudo ln -sf /etc/ssl/certs/* /opt/Citrix/ICAClient/keystore/cacerts/
sudo c_rehash /opt/Citrix/ICAClient/keystore/cacerts/
Fehlende Intermediate-Zertifikate: Der Citrix StoreFront-Server (apps.krah-gruppe.de) liefert kein Intermediate-Zertifikat mit. Browser laden fehlende Intermediates automatisch nach (AIA), der Citrix-Client aber nicht. Das Intermediate muss manuell hinzugefügt werden:
# Intermediate-Zertifikat von GlobalSign herunterladen und konvertieren
curl -sL http://secure.globalsign.com/cacert/gsgccr6alphasslca2025.crt \
| openssl x509 -inform DER -out /opt/Citrix/ICAClient/keystore/cacerts/gsgccr6alphasslca2025.pem
sudo c_rehash /opt/Citrix/ICAClient/keystore/cacerts/
Hinweis: Bei Zertifikatserneuerung kann sich die Intermediate-CA ändern. Die AIA-URL steht im Server-Zertifikat:
openssl s_client -connect apps.krah-gruppe.de:443 </dev/null 2>&1 | openssl x509 -noout -text | grep 'CA Issuers'
receiver://-Protokoll-Handler
Das AUR-Paket registriert den receiver://-Protokoll-Handler nicht automatisch. Ohne diesen öffnet der Browser einen KIO-Fehler statt die Citrix App. Fix:
printf '[Desktop Entry]
Type=Application
Name=Citrix Receiver Protocol Handler
NoDisplay=true
MimeType=x-scheme-handler/receiver;
TryExec=/opt/Citrix/ICAClient/selfservice
Exec=/opt/Citrix/ICAClient/selfservice --icaroot /opt/Citrix/ICAClient %%u
' | sudo tee /usr/share/applications/citrix-receiver-handler.desktop
xdg-mime default citrix-receiver-handler.desktop x-scheme-handler/receiver
Store-Konfiguration importieren
Die StoreFront-Webseite bietet eine .cr-Datei (Provisioning-Datei) an. Diese wird als text/x-crystal erkannt und im Texteditor geöffnet statt in Citrix. Import über CLI:
/opt/Citrix/ICAClient/selfservice --icaroot /opt/Citrix/ICAClient ~/Downloads/receiverconfig.cr
keyd — Tastatur-Remapping (Logitech MX Mechanical)
- Paket:
keyd(AUR, via paru) - Gerät: Logitech MX Mechanical Keyboard (
046d:b366) - Config:
/etc/keyd/default.conf - Mapping: Calculator-Taste → Druck/Screenshot
- Wichtig:
[ids]nur auf die Logitech-ID beschränken, nicht*— sonst werden globale Shortcuts (z.B. Super+Shift+Space) blockiert - Keynamen ermitteln:
sudo keyd -mzeigt die tatsächlichen Keynamen (z.B.calc, nichtcalculator)
[ids]
046d:b366
[main]
calc = print
sudo systemctl enable --now keyd
sudo keyd reload # nach Config-Änderungen
Lenovo Dockingstation (DisplayLink)
- Treiber:
displaylink(AUR, via paru) +evdi-dkms(AUR) - Service:
displaylink.service(systemd) - Einrichtung:
paru -S evdi-dkms displaylink
sudo systemctl enable --now displaylink
- Hinweis:
evdi-dkmskompiliert per DKMS gegen den aktiven Kernel — nach Kernel-Updates wird das Modul automatisch neu gebaut
Microsoft Teams (teams-for-linux)
- Paket:
teams-for-linux(CachyOS-Repo), Electron-basierter Unofficial Client - Problem: Kamera und Tonausgabe funktionierten ohne zusätzliche Konfiguration nicht
- Kamera: Electron nutzt ohne
WebRTCPipeWireCapturernicht den PipeWire-Kamerapfad - Tonausgabe: Chromiums
AudioServiceOutOfProcess-Feature lagert Audio in einen Sandboxed-Prozess aus, der unter PipeWire/Wayland keinen Zugriff auf den PipeWire-Socket (/run/user/1000/pipewire-0) hat — es wird kein Audio-Output-Stream erzeugt
- Kamera: Electron nutzt ohne
- Lösung: Beide Probleme über
electronCLIFlagsin der App-Config beheben:- Config:
~/.config/teams-for-linux/config.json
{ "electronCLIFlags": [ ["enable-features", "WebRTCPipeWireCapturer"], ["disable-features", "AudioServiceOutOfProcess"] ] } - Config:
- Hinweis: Nach Änderung der Config muss Teams komplett neu gestartet werden (Tray-Icon schließen)
Installierte Pakete (manuell)
teams-for-linux— MS Teams Client (CachyOS-Repo)rclone— Cloud-Sync (pacman)onedrive-abraunegg— OneDrive-Client (nicht in Verwendung)networkmanager-openvpn— OpenVPN-Plugin für NetworkManager- Sophos Protection for Linux (SPL) —
/opt/sophos-spl, viaSophosSetup.shaus Sophos Central - SAP GUI for Java 8.10 —
/home/chk/SAPClients/SAPGUI8.10rev10/, benötigtjre-openjdk keyd— Tastatur-Remapping (AUR)freerdp— RDP-Client für Remote Desktop Manager (Symlinkxfreerdp→xfreerdp3nötig)remote-desktop-manager— Devolutions RDMicaclient— Citrix Workspace App (AUR)dotnet-sdk-9.0— .NET 9 SDKevdi-dkms— DisplayLink-Kernelmodul (AUR, DKMS)displaylink— DisplayLink-Treiber (AUR)
Polkit: Laufwerke ohne Passwort mounten
- Regel:
/etc/polkit-1/rules.d/10-udisks2-mount.rules - Erlaubt Mitgliedern der Gruppe
storagedas Mounten über den Dateimanager ohne Passwortabfrage - Abgedeckte Actions:
filesystem-mount,filesystem-mount-other-seat,filesystem-mount-system - Einrichtung:
printf 'polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.udisks2.filesystem-mount" ||
action.id == "org.freedesktop.udisks2.filesystem-mount-other-seat" ||
action.id == "org.freedesktop.udisks2.filesystem-mount-system") &&
subject.isInGroup("storage")) {
return polkit.Result.YES;
}
});
' | sudo tee /etc/polkit-1/rules.d/10-udisks2-mount.rules
- Hinweis: fish-Shell unterstützt kein
<< 'EOF'Heredoc —printf ... | sudo teeverwenden
BTRFS Subvolumes
/@→//@home→/home/@root→/root/@srv→/srv/@cache→/var/cache/@tmp→/var/tmp/@log→/var/log