De gepubliceerde desktop (CW Standaard Desktop) opent altijd op volledig
scherm, ongeacht instellingen in wfclient.ini of regels in de window
manager.
Het venstergedrag van een Citrix-sessie op Linux wordt bepaald door de
sessie-resolutie in het .ica-launchbestand, niet door de client-config
en niet door de window manager.
In ~/.ICAClient/launch.ica stond onder de sessie-sectie:
DesiredHRES=4294967295
DesiredVRES=4294967295
4294967295 is 0xFFFFFFFF, de maximale 32-bits waarde — Citrix' codewoord
voor "gebruik volledig scherm". Het .ica dat StoreFront aanlevert overschrijft
de client-config, dus aanpassingen in wfclient.ini (UseFullScreen,
ScreenPercent, DesiredHRES/VRES onder [Thinwire3.0]) hadden geen effect.
Waarom de KWin-vensterregel ook niet werkte: het echte sessievenster
(WM_CLASS = "Wfica" "Wfica") heeft geen _NET_WM_STATE_FULLSCREEN-vlag.
Citrix tekent gewoon een venster ter grootte van het scherm zonder echte
fullscreen-state. Een regel met fullscreen=false heeft dan niets om uit te
zetten. Forceren op size/maximize raakte het venster evenmin betrouwbaar.
Een wrapper rond /opt/Citrix/ICAClient/wfica patcht de DesiredHRES/VRES in
launch.ica naar een vaste resolutie vlak voordat wfica het bestand
inleest. Daardoor rendert de sessie zelf op die resolutie en opent het venster
vanzelf op die grootte — onafhankelijk van Wayland/X11, window-class of
fullscreen-state.
Mechanisme:
browser/StoreFront -> adapter -> wfica (= wrapper) -> wfica.real
|
+-- patcht launch.ica eerst
wfica.real.wfica wordt vervangen door een shellscript dat patcht en daarna
wfica.real aanroept.Sla het script op als citrix-windowed-install.sh en maak het uitvoerbaar:
chmod +x citrix-windowed-install.sh
sudo ./citrix-windowed-install.sh # default 1280x1024
sudo ./citrix-windowed-install.sh 1600 900 # eigen resolutie
#!/bin/bash
#
# citrix-windowed-install.sh
#
# Installeert (of herstelt na een Citrix-update) een wrapper rond
# /opt/Citrix/ICAClient/wfica die de sessie-resolutie in launch.ica
# patcht, zodat Citrix Workspace op Linux in een venster opent i.p.v.
# fullscreen.
#
# Gebruik:
# sudo ./citrix-windowed-install.sh # installeer met default 1280x1024
# sudo ./citrix-windowed-install.sh 1600 900 # eigen resolutie
# sudo ./citrix-windowed-install.sh --uninstall # herstel origineel
#
set -euo pipefail
ICACLIENT_DIR="/opt/Citrix/ICAClient"
WFICA="${ICACLIENT_DIR}/wfica"
WFICA_REAL="${ICACLIENT_DIR}/wfica.real"
HRES="${1:-1280}"
VRES="${2:-1024}"
err() { echo "FOUT: $*" >&2; exit 1; }
info() { echo ">> $*"; }
# --- root check ---------------------------------------------------------
if [ "$(id -u)" -ne 0 ]; then
err "Draai dit script met sudo (schrijven in ${ICACLIENT_DIR} vereist root)."
fi
# --- uninstall ----------------------------------------------------------
if [ "${1:-}" = "--uninstall" ]; then
if [ -f "$WFICA_REAL" ]; then
info "Origineel herstellen vanuit wfica.real ..."
mv -f "$WFICA_REAL" "$WFICA"
chmod +x "$WFICA"
info "Klaar. De wrapper is verwijderd en het origineel is hersteld."
else
err "Geen ${WFICA_REAL} gevonden; niets om te herstellen."
fi
exit 0
fi
# --- sanity checks ------------------------------------------------------
[ -d "$ICACLIENT_DIR" ] || err "${ICACLIENT_DIR} bestaat niet. Is Citrix Workspace geïnstalleerd?"
[[ "$HRES" =~ ^[0-9]+$ && "$VRES" =~ ^[0-9]+$ ]] || err "Resolutie moet numeriek zijn (bv. 1280 1024)."
# Detecteer de huidige situatie:
# - wfica is een echt binary, wfica.real bestaat niet -> verse install
# - wfica is onze wrapper, wfica.real bestaat -> al geïnstalleerd
# - wfica is een NIEUW binary (na update), wfica.real bestaat nog -> update overschreef; her-wrappen
is_our_wrapper() {
head -n 5 "$1" 2>/dev/null | grep -q "CITRIX-WINDOWED-WRAPPER"
}
if [ ! -e "$WFICA" ]; then
err "${WFICA} ontbreekt. Controleer de installatie handmatig."
fi
if is_our_wrapper "$WFICA"; then
if [ ! -f "$WFICA_REAL" ]; then
err "wfica is de wrapper, maar wfica.real ontbreekt. Herinstalleer Citrix Workspace."
fi
info "Wrapper is al actief; resolutie wordt bijgewerkt naar ${HRES}x${VRES}."
else
if [ -f "$WFICA_REAL" ]; then
info "Citrix-update gedetecteerd: nieuw wfica-binary gevonden. Oude wfica.real wordt vervangen."
mv -f "$WFICA" "$WFICA_REAL"
else
info "Origineel wfica-binary wordt verplaatst naar wfica.real ..."
mv -f "$WFICA" "$WFICA_REAL"
fi
fi
# --- schrijf de wrapper -------------------------------------------------
info "Wrapper schrijven naar ${WFICA} (resolutie ${HRES}x${VRES}) ..."
cat > "$WFICA" <<EOF
#!/bin/bash
# CITRIX-WINDOWED-WRAPPER (zie citrix-windowed-install.sh)
# Patcht de sessie-resolutie in launch.ica zodat Citrix in een venster opent.
WFICA_REAL="${WFICA_REAL}"
HRES="${HRES}"
VRES="${VRES}"
# Bepaal het ICA-bestand: meestal vast pad, maar val terug op een argument
# dat op .ica eindigt als dat wordt meegegeven.
ICA="\${HOME}/.ICAClient/launch.ica"
for arg in "\$@"; do
case "\$arg" in
*.ica) [ -f "\$arg" ] && ICA="\$arg" ;;
esac
done
if [ -f "\$ICA" ]; then
sed -i -E "s/^DesiredHRES=.*/DesiredHRES=\${HRES}/; s/^DesiredVRES=.*/DesiredVRES=\${VRES}/" "\$ICA"
echo "\$(date) patched \$ICA -> \${HRES}x\${VRES}" >> "\${HOME}/.ICAClient/wfica-wrapper.log"
fi
if [ ! -x "\$WFICA_REAL" ]; then
echo "wfica-wrapper: \$WFICA_REAL ontbreekt of is niet uitvoerbaar." >&2
exit 1
fi
exec "\$WFICA_REAL" "\$@"
EOF
chmod +x "$WFICA"
info "Klaar."
info "Test met een nieuwe Citrix-sessie en controleer:"
info " cat ~/.ICAClient/wfica-wrapper.log"
info "Resolutie aanpassen: draai dit script opnieuw met andere waarden."
info "Wrapper verwijderen: sudo $0 --uninstall"
Test daarna met een nieuwe Citrix-sessie:
cat ~/.ICAClient/wfica-wrapper.log
# verwacht een regel als:
# di 2 jun 2026 9:42:43 CEST patched /home/dexter/.ICAClient/launch.ica -> 1280x1024
Een update kan /opt/Citrix/ICAClient/wfica overschrijven met een nieuw binary;
dan verdwijnt de wrapper en opent Citrix weer fullscreen. Het script detecteert
dit en herstelt de wrapper. Draai simpelweg opnieuw:
sudo ./citrix-windowed-install.sh
Het script is idempotent:
wfica.real, plaatst wrapper;wfica.real door het nieuwe
binary en herplaatst de wrapper.Bewaar het script bij je dotfiles (dotf / transfuse) zodat je het na een
update meteen kunt terugzetten.
sudo ./citrix-windowed-install.sh --uninstall
Herstelt het originele wfica-binary vanuit wfica.real.
Draai het installatiescript opnieuw met andere waarden; dat herschrijft de wrapper met de nieuwe resolutie.
Beëindigt alle actieve Citrix-processen en ruimt UDS-sockets op. Zie ook: Citrix Workspace op Linux
chmod +x citrix-stop.sh
./citrix-stop.sh
#!/bin/bash
PATTERNS=(
wfica
icasessionmgr
UtilDaemon
ctxwebhelper
ctxaudio
ctxusb
adapter
selfservice
receiver
storebrowse
AuthManagerDaemon
)
stopped=0
for pattern in "${PATTERNS[@]}"; do
pids=$(pgrep -f "/opt/Citrix/ICAClient/.*${pattern}" 2>/dev/null)
if [[ -n "$pids" ]]; then
echo "Stoppen: $pattern (PID: $pids)"
kill $pids 2>/dev/null
stopped=$((stopped + 1))
fi
done
# Geef processen even de tijd om netjes te stoppen
sleep 2
# Controleer of er nog processen over zijn en forceer stop
for pattern in "${PATTERNS[@]}"; do
pids=$(pgrep -f "/opt/Citrix/ICAClient/.*${pattern}" 2>/dev/null)
if [[ -n "$pids" ]]; then
echo "Forceer stop: $pattern (PID: $pids)"
kill -9 $pids 2>/dev/null
fi
done
# Ruim UDS sockets op
rm -f /home/dexter/.ICAClient/UDS/wficasession_* 2>/dev/null
if [[ $stopped -eq 0 ]]; then
echo "Geen actieve Citrix-processen gevonden."
else
echo "Klaar."
fi
~/.ICAClient/wfica-wrapper.log bij elke
launch. Wil je dat niet, verwijder de echo-regel uit de gegenereerde wrapper
(of pas het installatiescript aan).DesiredHRES/VRES-waarde, niet alleen 4294967295, zodat het ook
werkt als StoreFront ooit andere waarden meestuurt.TWIMode=Off). Bij seamless
published apps geldt ander gedrag.