Launchers: neutral examples and made-up fixtures

Examples showed specific apps as if the repository installed or
configured them.

- Docs, README, template and option examples: the Signal Flatpak
  (org.signal.Signal, sgnl:// and signalcaptcha://) and a made-up
  org.example.App instead of the previous chat and remote-desktop apps;
  no install lines (the app is installed by the user, as noted).
- Portal fix: the file-dialog symptom phrased generically.
- Launcher check: made-up Flatpak entries org.example.Chat (Electron,
  --file-forwarding @@u %U @@, an action, an SSO scheme) and
  org.example.Remote (Qt, -qwindowtitle %c @@u %u @@, localized keys)
  replace the copied ones; Firefox, gedit and Jellyfin stay.
This commit is contained in:
Pierre Kisters committed 2026-10-01 18:16:37 +02:00
1 parent 3acacc6388
commit 59afc2f616
16 files changed
+122 -452

No files matched your search

+2 -2
View File
@@ -218,9 +218,9 @@ these two files ([`template/`](template), with more comments):
firefox.disableAv1 = true;
firefox.defaultBrowser = true;
jellyfin.hardwareDecoding.enable = true; # install the Flatpak yourself
launchers."im.riot.Riot" = { # Element: logins in both sessions
launchers."org.signal.Signal" = { # logins in both sessions; install the Flatpak yourself
keyring = { enable = true; electron = true; };
defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ];
defaultFor = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ];
};
docker.enable = true; # rootless
};
+16 -18
View File
@@ -22,12 +22,11 @@ the Frame's [two sessions](../README.md#two-sessions):
`XDG_CURRENT_DESKTOP`. In the Steam session that is `gamescope`, which it
doesn't know, so it falls back to `basic` (a local, unencrypted store) and
the login made in the desktop (stored in the wallet) is gone.
- **Flatpak permissions:** many Flatpaks may not talk to the wallet at all
(Element), or only to `org.kde.kwalletd6` while their KF6 wallet client
reads through the Secret Service `org.freedesktop.secrets` (KRDC: "Password
not found").
- **Login callbacks:** SSO logins come back through a URL scheme
(`io.element.desktop://`, `signalcaptcha://`) opened by the portal. Unless the app
- **Flatpak permissions:** many Flatpaks may not talk to the wallet at all,
or only to `org.kde.kwalletd6` while their KF6 wallet client reads through
the Secret Service `org.freedesktop.secrets` (the app finds no password).
- **Login callbacks:** logins come back through a URL scheme (e.g.
`signalcaptcha://`) opened by the portal. Unless the app
is the default and a recommended handler, the portal opens an app chooser,
which isn't shown in VR.
@@ -64,27 +63,26 @@ The desktop ID is the attribute name; the source is the Flatpak with that
app ID unless `source.package` or `source.file` is set. Installing the app
is up to you.
A Flatpak whose logins live in the wallet (Element, an Electron app), with
its SSO callback schemes:
A Flatpak whose logins live in the wallet (Signal, an Electron app), with
its link callback schemes, and a non-Electron app:
```nix
steamFrame.launchers."im.riot.Riot" = {
steamFrame.launchers."org.signal.Signal" = {
keyring = { enable = true; electron = true; };
defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ];
defaultFor = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ];
};
steamFrame.launchers."org.kde.krdc".keyring.enable = true;
steamFrame.launchers."org.example.App".keyring.enable = true;
```
A program from a Nix package, from the package's own entry
(`share/applications/<desktop ID>.desktop`, rewritten at build time):
A program from a Nix package (installed by you, e.g. in `home.packages`),
from the package's own entry (`share/applications/<desktop ID>.desktop`,
rewritten at build time):
```nix
{ pkgs, ... }: {
home.packages = [ pkgs.signal-desktop ];
steamFrame.launchers.signal = {
source.package = pkgs.signal-desktop;
keyring = { enable = true; electron = true; };
defaultFor = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ];
};
}
```
@@ -164,14 +162,14 @@ after an optional leading `env A=B …`. The rest (`--file-forwarding`,
`@@u %U @@`, `%c`, action arguments) stays. `DBusActivatable=true` becomes
`false` (otherwise the desktop would start the app over D-Bus, skipping
Exec), `defaultFor` and `mimeTypes` are added to `MimeType=`, and
`X-SteamFrameNix-Source=` names the source. Element's entry with
`X-SteamFrameNix-Source=` names the source. A Flatpak's entry with
`keyring = { enable = true; electron = true; }`:
```sh
env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \
/usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/element \
/usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-chat \
--file-forwarding --talk-name=org.kde.kwalletd6 --talk-name=org.freedesktop.secrets \
im.riot.Riot --password-store=kwallet6 @@u %U @@
org.example.Chat --password-store=kwallet6 @@u %U @@
```
`flatpak run` connects the sandbox's D-Bus proxy (and portals) to the bus in
+2 -2
View File
@@ -51,8 +51,8 @@ session's `xdg-desktop-portal` at `/usr/share/xdg-desktop-portal/gamescope-porta
which lacks `gamescope-portals.conf`: no backend, no OpenURI, so no app in
the Steam session can open links. Its two backends (gamescope, holo) also
have no FileChooser, so Flatpak apps fall back to a dialog inside their
sandbox: e.g. Element's Attachments shows an empty file selector without
your home dir.
sandbox: a Flatpak app's file selector shows only its sandbox, not your
home dir.
**What you get:** a working OpenURI portal in the Steam session and, with
`fileChooser`, KDE's file dialog there (a normal window in VR) with access
+2 -2
View File
@@ -63,8 +63,8 @@ pkgs.runCommand "cleanup-check" { nativeBuildInputs = [ cleanup pkgs.jq pkgs.git
mkdir -p $root/run/steam-frame-nix $root/run/systemd/user/steamvr.service.d
echo old > $root/run/steam-frame-nix/steamvr-debugger-restore
mkdir -p $root/run/steam-frame-nix/applications # steamFrame.launchers
echo '[Desktop Entry]' > $root/run/steam-frame-nix/applications/im.riot.Riot.desktop
echo x > $root/run/steam-frame-nix/applications/.im.riot.Riot.desktop.sum
echo '[Desktop Entry]' > $root/run/steam-frame-nix/applications/org.example.App.desktop
echo x > $root/run/steam-frame-nix/applications/.org.example.App.desktop.sum
: > $root/run/steam-frame-nix/applications/.lock
ln -s $HOME/.local/share/Steam/userdata/1/760/remote/250820/screenshots \
$root/run/steam-frame-nix/screenshots # steamFrame.screenshots
+5 -14
View File
@@ -37,15 +37,11 @@ let
removed = what: lib.mkRemovedOptionModule [ "steamFrame" "keyring" what ] ''
Keyring launchers are now steamFrame.launchers.<desktop ID>, made from the
app's own desktop entry (name, icon, actions come from it), e.g.
steamFrame.launchers."im.riot.Riot" = {
keyring = { enable = true; electron = true; };
defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ];
};
steamFrame.launchers.signal = {
source.package = pkgs.signal-desktop;
steamFrame.launchers."org.signal.Signal" = {
keyring = { enable = true; electron = true; };
defaultFor = [ "x-scheme-handler/sgnl" ];
};
steamFrame.launchers.signal.source.package = pkgs.signal-desktop; # a package's entry
(schemeHandlers = [ "x" ] -> defaultFor = [ "x-scheme-handler/x" ];
flatpakArgs, args, mimeTypes, settings keep their meaning; name, icon,
categories, actions, executable, fieldCode, ... are gone.)
@@ -58,16 +54,11 @@ in {
default = { };
example = lib.literalExpression ''
{
"im.riot.Riot" = {
"org.signal.Signal" = {
keyring = { enable = true; electron = true; };
defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ];
};
"org.kde.krdc".keyring.enable = true;
signal = {
source.package = pkgs.signal-desktop;
keyring = { enable = true; electron = true; };
defaultFor = [ "x-scheme-handler/sgnl" ];
defaultFor = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ];
};
"org.example.App".keyring.enable = true;
}
'';
description = ''
+23 -22
View File
@@ -1,8 +1,9 @@
# Checks of steamFrame.launchers (lib.nix, rewrite.awk, generate.sh) on
# copies of real entries (fixtures/sources: Element, KRDC, Firefox, gedit
# (DBusActivatable) from /var/lib/flatpak, Jellyfin from the user
# installation) and three made-up ones (quoting, an Exec without anchor, an
# Electron app from a fake package):
# copies of real entries (fixtures/sources: Firefox, gedit (DBusActivatable)
# from /var/lib/flatpak, Jellyfin from the user installation) and made-up
# ones: two Flatpaks (an Electron chat app with an action and an SSO scheme,
# a Qt app with `-qwindowtitle %c`), quoting, an Exec without anchor, an
# Electron app from a fake package:
# - the rewritten entries equal fixtures/expected (X-SteamFrameNix-Source
# compared separately) and pass desktop-file-validate;
# - the generator: unchanged sources change nothing (mtimes kept, no touch of
@@ -32,11 +33,11 @@ let
(L.launcherModule { bus = "unix:path=/run/user/1000/bus"; }));
};
config.launchers = {
"im.riot.Riot" = {
"org.example.Chat" = {
keyring = { enable = true; electron = true; };
defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ];
defaultFor = [ "x-scheme-handler/example-chat" ];
};
"org.kde.krdc".keyring.enable = true;
"org.example.Remote".keyring.enable = true;
"org.mozilla.firefox" = {
wrappers = [ "/nix/store/00000000000000000000000000000000-firefox-wrapper" ];
defaultFor = [ "x-scheme-handler/http" "x-scheme-handler/https" "text/html" ];
@@ -98,7 +99,7 @@ pkgs.runCommand "launchers-check" {
export STEAM_FRAME_NIX_FLATPAK_EXPORTS=$root/user:$root/system
out_dir=$root/run/steam-frame-nix/applications
mkdir -p $root/user $root/system $root/apps
for id in im.riot.Riot org.kde.krdc org.mozilla.firefox org.gnome.gedit org.example.NoAnchor; do
for id in org.example.Chat org.example.Remote org.mozilla.firefox org.gnome.gedit org.example.NoAnchor; do
cp ${src}/$id.desktop $root/system/
done
cp ${src}/org.jellyfin.JellyfinDesktop.desktop $root/user/
@@ -130,7 +131,7 @@ pkgs.runCommand "launchers-check" {
cp ${app} $out/actual/org.example.App.desktop
grep -qx "X-SteamFrameNix-Source=$root/user/org.jellyfin.JellyfinDesktop.desktop" $out/actual/org.jellyfin.JellyfinDesktop.desktop \
|| fail "Jellyfin not from the user installation"
grep -qx "X-SteamFrameNix-Source=$root/system/org.kde.krdc.desktop" $out/actual/org.kde.krdc.desktop || fail "KRDC source"
grep -qx "X-SteamFrameNix-Source=$root/system/org.example.Remote.desktop" $out/actual/org.example.Remote.desktop || fail "system source"
grep -qx "X-SteamFrameNix-Source=${src}/org.example.Quoting.desktop" $out/actual/org.example.Quoting.desktop || fail "file source"
grep -qx "X-SteamFrameNix-Source=${fakeApp}/share/applications/org.example.App.desktop" $out/actual/org.example.App.desktop || fail "package source"
sed -i 's|^X-SteamFrameNix-Source=.*|X-SteamFrameNix-Source=@SOURCE@|' $out/actual/*.desktop
@@ -147,13 +148,13 @@ pkgs.runCommand "launchers-check" {
for f in $out_dir/*.desktop; do [ "$(mt $f)" = 1000000000 ] || fail "unchanged run rewrote $f"; done
# changed source: rewritten, dir touched
echo '# changed' >> $root/system/org.kde.krdc.desktop
echo '# changed' >> $root/system/org.example.Remote.desktop
run
logged "org.kde.krdc: entry written"
[ "$(mt $out_dir/org.kde.krdc.desktop)" != 1000000000 ] || fail "changed source not rewritten"
[ "$(mt $out_dir/im.riot.Riot.desktop)" = 1000000000 ] || fail "other entry rewritten"
logged "org.example.Remote: entry written"
[ "$(mt $out_dir/org.example.Remote.desktop)" != 1000000000 ] || fail "changed source not rewritten"
[ "$(mt $out_dir/org.example.Chat.desktop)" = 1000000000 ] || fail "other entry rewritten"
[ "$(mt $root/apps)" != 1000000000 ] || fail "changed run didn't touch the applications dir"
grep -qx '# changed' $out_dir/org.kde.krdc.desktop || fail "comment not kept"
grep -qx '# changed' $out_dir/org.example.Remote.desktop || fail "comment not kept"
# launcher no longer configured, source gone: removed
echo stale > $out_dir/org.example.Old.desktop; echo x > $out_dir/.org.example.Old.desktop.sum
@@ -166,17 +167,17 @@ pkgs.runCommand "launchers-check" {
[ "$(mt $root/apps)" != 1000000000 ] || fail "removal didn't touch the applications dir"
# edited entry (e.g. KDE's editor writing through the link): overwritten
cp $out_dir/im.riot.Riot.desktop $root/riot
echo 'Name[de]=Edited' >> $out_dir/im.riot.Riot.desktop
cp $out_dir/org.example.Chat.desktop $root/chat
echo 'Name[de]=Edited' >> $out_dir/org.example.Chat.desktop
run
logged "im.riot.Riot.desktop was edited"
cmp -s $root/riot $out_dir/im.riot.Riot.desktop || fail "edit not overwritten"
logged "org.example.Chat.desktop was edited"
cmp -s $root/chat $out_dir/org.example.Chat.desktop || fail "edit not overwritten"
# replaced link: reported; our own link: not
ln -s $out_dir/im.riot.Riot.desktop $root/apps/im.riot.Riot.desktop
echo '[Desktop Entry]' > $root/apps/org.kde.krdc.desktop
ln -s $out_dir/org.example.Chat.desktop $root/apps/org.example.Chat.desktop
echo '[Desktop Entry]' > $root/apps/org.example.Remote.desktop
run
logged "org.kde.krdc.desktop no longer leads to"
! grep -q "im.riot.Riot.desktop no longer" $root/log || fail "own link reported"
logged "org.example.Remote.desktop no longer leads to"
! grep -q "org.example.Chat.desktop no longer" $root/log || fail "own link reported"
# no launchers left (the activation runs it anyway): all entries removed
old $root/apps
@@ -1,12 +0,0 @@
[Desktop Entry]
Type=Application
Name=Element
Comment=A Matrix-based instant messaging client
Icon=im.riot.Riot
Exec=env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/element --file-forwarding --talk-name=org.kde.kwalletd6 --talk-name=org.freedesktop.secrets im.riot.Riot --password-store=kwallet6 @@u %U @@
Categories=Network;InstantMessaging;Chat;VideoConference;
MimeType=x-scheme-handler/element;x-scheme-handler/io.element.desktop;
StartupWMClass=element
Keywords=Matrix;matrix.org;chat;irc;communications;talk;riot;vector;
X-Flatpak=im.riot.Riot
X-SteamFrameNix-Source=@SOURCE@
@@ -0,0 +1,17 @@
[Desktop Entry]
Type=Application
Name=Example Chat
Comment=A made-up Electron chat app (Flatpak) with an SSO callback scheme
Icon=org.example.Chat
Exec=env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-chat --file-forwarding --talk-name=org.kde.kwalletd6 --talk-name=org.freedesktop.secrets org.example.Chat --password-store=kwallet6 @@u %U @@
Categories=Network;InstantMessaging;Chat;
MimeType=x-scheme-handler/example-chat;
StartupWMClass=example-chat
Keywords=chat;messaging;
Actions=new-window;
X-Flatpak=org.example.Chat
X-SteamFrameNix-Source=@SOURCE@
[Desktop Action new-window]
Name=New Window
Exec=env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-chat --talk-name=org.kde.kwalletd6 --talk-name=org.freedesktop.secrets org.example.Chat --password-store=kwallet6 --new-window
@@ -0,0 +1,17 @@
[Desktop Entry]
Type=Application
Exec=env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-remote --file-forwarding --talk-name=org.kde.kwalletd6 --talk-name=org.freedesktop.secrets org.example.Remote -qwindowtitle %c @@u %u @@
Icon=org.example.Remote
Terminal=false
Name=Example Remote
Name[de]=Beispiel-Fernzugriff
Name[zh_TW]=範例遠端
GenericName=Remote Desktop Client
GenericName[de]=Fernzugriff
Comment=A made-up Qt app (Flatpak) that reads its passwords through the Secret Service
StartupWMClass=example-remote
MimeType=x-scheme-handler/vnc;x-scheme-handler/rdp;application/x-example-remote;
Categories=Qt;KDE;Network;RemoteAccess;
X-KDE-Wayland-Interfaces=org_kde_kwin_keystate
X-Flatpak=org.example.Remote
X-SteamFrameNix-Source=@SOURCE@
@@ -1,182 +0,0 @@
[Desktop Entry]
Type=Application
Exec=env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/krdc --file-forwarding --talk-name=org.kde.kwalletd6 --talk-name=org.freedesktop.secrets org.kde.krdc -qwindowtitle %c @@u %u @@
Icon=org.kde.krdc
Terminal=false
Name=KRDC
Name[ar]=كردس
Name[az]=KRDC
Name[bg]=KRDC
Name[bs]=KRDC
Name[ca]=KRDC
Name[ca@valencia]=KRDC
Name[cs]=KRDC
Name[da]=KRDC
Name[de]=KRDC
Name[el]=KRDC
Name[en_GB]=KRDC
Name[eo]=KRDC
Name[es]=KRDC
Name[et]=KRDC
Name[eu]=KRDC
Name[fi]=KRDC
Name[fr]=KRDC
Name[ga]=KRDC
Name[gl]=KRDC
Name[he]=KRDC
Name[hne]=केआरडीसी
Name[hr]=KRDC
Name[hu]=KRDC
Name[ia]=KRDC
Name[is]=KRDC
Name[it]=KRDC
Name[ja]=KRDC
Name[ka]=KRDC
Name[kk]=KRDC
Name[km]=KRDC
Name[ko]=KRDC
Name[lt]=KRDC
Name[lv]=KRDC
Name[ml]=കെആര്‍ഡിസി
Name[mr]=के-आर-डी-सी
Name[nb]=KRDC
Name[nds]=KRDC
Name[nl]=KRDC
Name[nn]=KRDC
Name[pa]=KRDC
Name[pl]=KRDC
Name[pt]=KRDC
Name[pt_BR]=KRDC
Name[ro]=KRDC
Name[ru]=KRDC
Name[sa]=केआरडीसी
Name[si]=KRDC
Name[sk]=KRDC
Name[sl]=KRDC
Name[sq]=KRDC
Name[sr]=КРДЦ
Name[sr@ijekavian]=КРДЦ
Name[sr@ijekavianlatin]=KRDC
Name[sr@latin]=KRDC
Name[sv]=KRDC
Name[tr]=KRDC
Name[ug]=KRDC
Name[uk]=KRDC
Name[wa]=KRDC
Name[zh_CN]=KRDC
Name[zh_TW]=遠端桌面_KRDC
GenericName=Remote Desktop Client
GenericName[ar]=عميل سطح المكتب البعيد
GenericName[az]=İş masasının uzaqdan idarə olunması
GenericName[bg]=Отдалечен работен плот
GenericName[bs]=Klijent udaljene radne površine
GenericName[ca]=Client d'escriptori remot
GenericName[ca@valencia]=Client d'escriptori remot
GenericName[cs]=Klient vzdálené pracovní plochy
GenericName[da]=Klient til fjernskrivebord
GenericName[de]=Verbindung zu entferntem Rechner
GenericName[el]=Πελάτης απομακρυσμένης επιφάνειας εργασίας
GenericName[en_GB]=Remote Desktop Client
GenericName[eo]=Kliento por fora labortablo
GenericName[es]=Cliente de escritorio remoto
GenericName[et]=Kaugtöölaua klient
GenericName[eu]=Urruneko mahaigainaren bezeroa
GenericName[fi]=Etätyöpöytäasiakas
GenericName[fr]=Connexion à un bureau distant
GenericName[ga]=Cliant Deisce Cianda
GenericName[gl]=Cliente de escritorio remoto
GenericName[he]=לקוח שולחן עבודה מרוחק
GenericName[hne]=रिमोट डेस्कटाप क्लाएंट
GenericName[hr]=Klijent za udaljeno povezivanje
GenericName[hu]=Távoli asztal kliens
GenericName[ia]=Cliente de scriptorio remote
GenericName[is]=Tengingar við fjarlæg skjáborð
GenericName[it]=Client per connessione a desktop remoto
GenericName[ja]=リモートデスクトップクライアント
GenericName[ka]=დისტანციური სამუშაო მაგიდის კლიენტი
GenericName[kk]=Қашықтан үстелге қосылу клиенті
GenericName[km]=កម្មវិធី​មើល​ផ្ទៃតុ​ពី​ចម្ងាយ
GenericName[ko]=원격 데스크톱 클라이언트
GenericName[lt]=Nuotolinio darbalaukio kliento programa
GenericName[lv]=Attālās darbvirsmas klients
GenericName[ml]=വിദൂര പണിയിട ക്ലയന്റ്
GenericName[mr]=दूरस्थ डेस्कटॉप ग्राहक
GenericName[nb]=Tilkobling til annet skrivebord
GenericName[nds]=Schriefdisch-Feernverbinnen
GenericName[nl]=Client voor verbinding met extern bureaublad
GenericName[nn]=Tilkopling til eksternt skrivebord
GenericName[pa]=ਰਿਮੋਟ ਡੈਸਕਟਾਪ ਕਲਾਈਟ
GenericName[pl]=Klient zdalnego dostępu do pulpitu
GenericName[pt]=Cliente de Ecrãs Remotos
GenericName[pt_BR]=Cliente de área de trabalho remota
GenericName[ro]=Client pentru birou la distanță
GenericName[ru]=Удалённый доступ к рабочему столу
GenericName[sa]=दूरस्थ डेस्कटॉप क्लायन्ट
GenericName[si]=දුරස්ථ වැඩතල යෙදුම
GenericName[sk]=Klient vzdialenej pracovnej plochy
GenericName[sl]=Odjemalec za oddaljena namizja
GenericName[sr]=Клијент удаљене површи
GenericName[sr@ijekavian]=Клијент удаљене површи
GenericName[sr@ijekavianlatin]=Klijent udaljene površi
GenericName[sr@latin]=Klijent udaljene površi
GenericName[sv]=Fjärranslutning till skrivbord
GenericName[th]=ไคลเอนต์เชื่อมต่อพื้นที่ทำงานทางไกล
GenericName[tr]=Uzak Masaüstü İstemcisi
GenericName[ug]=يىراقتىكى ئۈستەلئۈستى خېرىدارى
GenericName[uk]=Клієнт з'єднання з віддаленою стільницею
GenericName[zh_CN]=远程桌面客户端
GenericName[zh_TW]=遠端桌面用戶端
Comment=Connect with RDP or VNC to another computer
Comment[ar]=اتصل حاسوب آخر بواسطة RDP أو VNC
Comment[az]=RDP və ya VNC ilə başqa kompüterə qoşulun
Comment[bg]=Свързване чрез RDP or VNC с друг компютър
Comment[ca]=Connecta amb RDP o VNC a un altre ordinador
Comment[ca@valencia]=Connecta amb RDP o VNC a un altre ordinador
Comment[cs]=Připojte se k jinému počítači pomocí RDP nebo VNC
Comment[da]=Opret forbindelse til en anden computer med RDP eller VNC
Comment[de]=Verbindung mit RDP oder VNC zu einem anderen Rechner
Comment[el]=Σύνδεση με RDP ή VNC σε άλλον υπολογιστή
Comment[en_GB]=Connect with RDP or VNC to another computer
Comment[eo]=Konektiĝi per RDP aŭ VNC al alia komputilo
Comment[es]=Conectar con RDP o VNC a otro equipo
Comment[et]=Ühendumine RDP või VNC vahendusel teise arvutiga
Comment[eu]=Konektatu RDP edo VNC bidez beste ordenagailu batera
Comment[fi]=Yhdistä RDP:llä tai VNC:llä toiseen tietokoneeseen
Comment[fr]=Se connecter à un autre ordinateur avec RDP ou VNC
Comment[gl]=Conectarse por RDP ou VNC a outro computador.
Comment[he]=התחברות ל־RDP או ל־VNC במחשב אחר
Comment[hu]=Csatlakozás másik számítógéphez RDP-vel vagy VNC-vel
Comment[ia]=Connecte con RDP o VNC a un altere computator
Comment[is]=Tengstu með RDP eða VNC við aðrar tölvur
Comment[it]=Connessione via RDP o VNC ad un altro computer
Comment[ka]=მიუერთდით მოშორებულ კომპიუტერზე RDP ან VNC პროტოკოლით
Comment[ko]=다른 컴퓨터에 RDP나 VNC로 연결
Comment[lt]=Prisijungti prie kito kompiuterio naudojant RDP ar VNC
Comment[lv]=Izmantojiet RDP vai VNC, lai pievienotos citam datoram
Comment[nl]=Met RDP of VNC naar een andere computer verbinden
Comment[nn]=Kopla til ei anna datamaskin via RDP eller VNC
Comment[pl]=Połącz się przy użyciu RDP lub VNC do innego komputera
Comment[pt]=Ligar-se com RDP ou VNC a outro computador
Comment[pt_BR]=Conecte com RDP ou VNC em outro computador
Comment[ro]=Conectare la alt calculator prin RDP sau VNC
Comment[ru]=Подключение к другому компьютеру по RDP или VNC
Comment[sa]=RDP अथवा VNC इत्यनेन सह अन्यसङ्गणकेन सह सम्बद्धं कुर्वन्तु
Comment[sk]=Pripojiť pomocou RDP alebo VNC k inému počítaču
Comment[sl]=Povežite se preko RDP-ja ali VNC-ja z drugim računalnikom
Comment[sq]=Lidhu me një kompjuter tjetër përmes RDP ose VNC
Comment[sr]=Повежите се РДП‑ом или ВНЦ‑ом са другим рачунаром
Comment[sr@ijekavian]=Повежите се РДП‑ом или ВНЦ‑ом са другим рачунаром
Comment[sr@ijekavianlatin]=Povežite se RDP‑om ili VNC‑om sa drugim računarom
Comment[sr@latin]=Povežite se RDP‑om ili VNC‑om sa drugim računarom
Comment[sv]=Anslut till en annan dator med RDP eller VNC
Comment[tr]=Başka bir bilgisayara RDP veya VNC ile bağlan
Comment[uk]=З'єднання з іншим комп'ютером за допомогою RDP або VNC
Comment[zh_CN]=通过 RDP 或 VNC 连接到另一台计算机
Comment[zh_TW]=以 RDP 或 VNC 連線到其他電腦
X-DocPath=krdc/index.html
StartupWMClass=krdc
MimeType=x-scheme-handler/vnc;x-scheme-handler/rdp;application/x-krdc;
Categories=Qt;KDE;Network;RemoteAccess;
X-KDE-Wayland-Interfaces=org_kde_kwin_keystate
X-Flatpak=org.kde.krdc
X-SteamFrameNix-Source=@SOURCE@
@@ -1,11 +0,0 @@
[Desktop Entry]
Type=Application
Name=Element
Comment=A Matrix-based instant messaging client
Icon=im.riot.Riot
Exec=/usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/element --file-forwarding im.riot.Riot @@u %U @@
Categories=Network;InstantMessaging;Chat;VideoConference;
MimeType=x-scheme-handler/element;x-scheme-handler/io.element.desktop;
StartupWMClass=element
Keywords=Matrix;matrix.org;chat;irc;communications;talk;riot;vector;
X-Flatpak=im.riot.Riot
@@ -0,0 +1,16 @@
[Desktop Entry]
Type=Application
Name=Example Chat
Comment=A made-up Electron chat app (Flatpak) with an SSO callback scheme
Icon=org.example.Chat
Exec=/usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-chat --file-forwarding org.example.Chat @@u %U @@
Categories=Network;InstantMessaging;Chat;
MimeType=x-scheme-handler/example-chat;
StartupWMClass=example-chat
Keywords=chat;messaging;
Actions=new-window;
X-Flatpak=org.example.Chat
[Desktop Action new-window]
Name=New Window
Exec=/usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-chat org.example.Chat --new-window
@@ -0,0 +1,16 @@
[Desktop Entry]
Type=Application
Exec=/usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-remote --file-forwarding org.example.Remote -qwindowtitle %c @@u %u @@
Icon=org.example.Remote
Terminal=false
Name=Example Remote
Name[de]=Beispiel-Fernzugriff
Name[zh_TW]=範例遠端
GenericName=Remote Desktop Client
GenericName[de]=Fernzugriff
Comment=A made-up Qt app (Flatpak) that reads its passwords through the Secret Service
StartupWMClass=example-remote
MimeType=x-scheme-handler/vnc;x-scheme-handler/rdp;application/x-example-remote;
Categories=Qt;KDE;Network;RemoteAccess;
X-KDE-Wayland-Interfaces=org_kde_kwin_keystate
X-Flatpak=org.example.Remote
@@ -1,181 +0,0 @@
[Desktop Entry]
Type=Application
Exec=/usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/krdc --file-forwarding org.kde.krdc -qwindowtitle %c @@u %u @@
Icon=org.kde.krdc
Terminal=false
Name=KRDC
Name[ar]=كردس
Name[az]=KRDC
Name[bg]=KRDC
Name[bs]=KRDC
Name[ca]=KRDC
Name[ca@valencia]=KRDC
Name[cs]=KRDC
Name[da]=KRDC
Name[de]=KRDC
Name[el]=KRDC
Name[en_GB]=KRDC
Name[eo]=KRDC
Name[es]=KRDC
Name[et]=KRDC
Name[eu]=KRDC
Name[fi]=KRDC
Name[fr]=KRDC
Name[ga]=KRDC
Name[gl]=KRDC
Name[he]=KRDC
Name[hne]=केआरडीसी
Name[hr]=KRDC
Name[hu]=KRDC
Name[ia]=KRDC
Name[is]=KRDC
Name[it]=KRDC
Name[ja]=KRDC
Name[ka]=KRDC
Name[kk]=KRDC
Name[km]=KRDC
Name[ko]=KRDC
Name[lt]=KRDC
Name[lv]=KRDC
Name[ml]=കെആര്‍ഡിസി
Name[mr]=के-आर-डी-सी
Name[nb]=KRDC
Name[nds]=KRDC
Name[nl]=KRDC
Name[nn]=KRDC
Name[pa]=KRDC
Name[pl]=KRDC
Name[pt]=KRDC
Name[pt_BR]=KRDC
Name[ro]=KRDC
Name[ru]=KRDC
Name[sa]=केआरडीसी
Name[si]=KRDC
Name[sk]=KRDC
Name[sl]=KRDC
Name[sq]=KRDC
Name[sr]=КРДЦ
Name[sr@ijekavian]=КРДЦ
Name[sr@ijekavianlatin]=KRDC
Name[sr@latin]=KRDC
Name[sv]=KRDC
Name[tr]=KRDC
Name[ug]=KRDC
Name[uk]=KRDC
Name[wa]=KRDC
Name[zh_CN]=KRDC
Name[zh_TW]=遠端桌面_KRDC
GenericName=Remote Desktop Client
GenericName[ar]=عميل سطح المكتب البعيد
GenericName[az]=İş masasının uzaqdan idarə olunması
GenericName[bg]=Отдалечен работен плот
GenericName[bs]=Klijent udaljene radne površine
GenericName[ca]=Client d'escriptori remot
GenericName[ca@valencia]=Client d'escriptori remot
GenericName[cs]=Klient vzdálené pracovní plochy
GenericName[da]=Klient til fjernskrivebord
GenericName[de]=Verbindung zu entferntem Rechner
GenericName[el]=Πελάτης απομακρυσμένης επιφάνειας εργασίας
GenericName[en_GB]=Remote Desktop Client
GenericName[eo]=Kliento por fora labortablo
GenericName[es]=Cliente de escritorio remoto
GenericName[et]=Kaugtöölaua klient
GenericName[eu]=Urruneko mahaigainaren bezeroa
GenericName[fi]=Etätyöpöytäasiakas
GenericName[fr]=Connexion à un bureau distant
GenericName[ga]=Cliant Deisce Cianda
GenericName[gl]=Cliente de escritorio remoto
GenericName[he]=לקוח שולחן עבודה מרוחק
GenericName[hne]=रिमोट डेस्कटाप क्लाएंट
GenericName[hr]=Klijent za udaljeno povezivanje
GenericName[hu]=Távoli asztal kliens
GenericName[ia]=Cliente de scriptorio remote
GenericName[is]=Tengingar við fjarlæg skjáborð
GenericName[it]=Client per connessione a desktop remoto
GenericName[ja]=リモートデスクトップクライアント
GenericName[ka]=დისტანციური სამუშაო მაგიდის კლიენტი
GenericName[kk]=Қашықтан үстелге қосылу клиенті
GenericName[km]=កម្មវិធី​មើល​ផ្ទៃតុ​ពី​ចម្ងាយ
GenericName[ko]=원격 데스크톱 클라이언트
GenericName[lt]=Nuotolinio darbalaukio kliento programa
GenericName[lv]=Attālās darbvirsmas klients
GenericName[ml]=വിദൂര പണിയിട ക്ലയന്റ്
GenericName[mr]=दूरस्थ डेस्कटॉप ग्राहक
GenericName[nb]=Tilkobling til annet skrivebord
GenericName[nds]=Schriefdisch-Feernverbinnen
GenericName[nl]=Client voor verbinding met extern bureaublad
GenericName[nn]=Tilkopling til eksternt skrivebord
GenericName[pa]=ਰਿਮੋਟ ਡੈਸਕਟਾਪ ਕਲਾਈਟ
GenericName[pl]=Klient zdalnego dostępu do pulpitu
GenericName[pt]=Cliente de Ecrãs Remotos
GenericName[pt_BR]=Cliente de área de trabalho remota
GenericName[ro]=Client pentru birou la distanță
GenericName[ru]=Удалённый доступ к рабочему столу
GenericName[sa]=दूरस्थ डेस्कटॉप क्लायन्ट
GenericName[si]=දුරස්ථ වැඩතල යෙදුම
GenericName[sk]=Klient vzdialenej pracovnej plochy
GenericName[sl]=Odjemalec za oddaljena namizja
GenericName[sr]=Клијент удаљене површи
GenericName[sr@ijekavian]=Клијент удаљене површи
GenericName[sr@ijekavianlatin]=Klijent udaljene površi
GenericName[sr@latin]=Klijent udaljene površi
GenericName[sv]=Fjärranslutning till skrivbord
GenericName[th]=ไคลเอนต์เชื่อมต่อพื้นที่ทำงานทางไกล
GenericName[tr]=Uzak Masaüstü İstemcisi
GenericName[ug]=يىراقتىكى ئۈستەلئۈستى خېرىدارى
GenericName[uk]=Клієнт з'єднання з віддаленою стільницею
GenericName[zh_CN]=远程桌面客户端
GenericName[zh_TW]=遠端桌面用戶端
Comment=Connect with RDP or VNC to another computer
Comment[ar]=اتصل حاسوب آخر بواسطة RDP أو VNC
Comment[az]=RDP və ya VNC ilə başqa kompüterə qoşulun
Comment[bg]=Свързване чрез RDP or VNC с друг компютър
Comment[ca]=Connecta amb RDP o VNC a un altre ordinador
Comment[ca@valencia]=Connecta amb RDP o VNC a un altre ordinador
Comment[cs]=Připojte se k jinému počítači pomocí RDP nebo VNC
Comment[da]=Opret forbindelse til en anden computer med RDP eller VNC
Comment[de]=Verbindung mit RDP oder VNC zu einem anderen Rechner
Comment[el]=Σύνδεση με RDP ή VNC σε άλλον υπολογιστή
Comment[en_GB]=Connect with RDP or VNC to another computer
Comment[eo]=Konektiĝi per RDP aŭ VNC al alia komputilo
Comment[es]=Conectar con RDP o VNC a otro equipo
Comment[et]=Ühendumine RDP või VNC vahendusel teise arvutiga
Comment[eu]=Konektatu RDP edo VNC bidez beste ordenagailu batera
Comment[fi]=Yhdistä RDP:llä tai VNC:llä toiseen tietokoneeseen
Comment[fr]=Se connecter à un autre ordinateur avec RDP ou VNC
Comment[gl]=Conectarse por RDP ou VNC a outro computador.
Comment[he]=התחברות ל־RDP או ל־VNC במחשב אחר
Comment[hu]=Csatlakozás másik számítógéphez RDP-vel vagy VNC-vel
Comment[ia]=Connecte con RDP o VNC a un altere computator
Comment[is]=Tengstu með RDP eða VNC við aðrar tölvur
Comment[it]=Connessione via RDP o VNC ad un altro computer
Comment[ka]=მიუერთდით მოშორებულ კომპიუტერზე RDP ან VNC პროტოკოლით
Comment[ko]=다른 컴퓨터에 RDP나 VNC로 연결
Comment[lt]=Prisijungti prie kito kompiuterio naudojant RDP ar VNC
Comment[lv]=Izmantojiet RDP vai VNC, lai pievienotos citam datoram
Comment[nl]=Met RDP of VNC naar een andere computer verbinden
Comment[nn]=Kopla til ei anna datamaskin via RDP eller VNC
Comment[pl]=Połącz się przy użyciu RDP lub VNC do innego komputera
Comment[pt]=Ligar-se com RDP ou VNC a outro computador
Comment[pt_BR]=Conecte com RDP ou VNC em outro computador
Comment[ro]=Conectare la alt calculator prin RDP sau VNC
Comment[ru]=Подключение к другому компьютеру по RDP или VNC
Comment[sa]=RDP अथवा VNC इत्यनेन सह अन्यसङ्गणकेन सह सम्बद्धं कुर्वन्तु
Comment[sk]=Pripojiť pomocou RDP alebo VNC k inému počítaču
Comment[sl]=Povežite se preko RDP-ja ali VNC-ja z drugim računalnikom
Comment[sq]=Lidhu me një kompjuter tjetër përmes RDP ose VNC
Comment[sr]=Повежите се РДП‑ом или ВНЦ‑ом са другим рачунаром
Comment[sr@ijekavian]=Повежите се РДП‑ом или ВНЦ‑ом са другим рачунаром
Comment[sr@ijekavianlatin]=Povežite se RDP‑om ili VNC‑om sa drugim računarom
Comment[sr@latin]=Povežite se RDP‑om ili VNC‑om sa drugim računarom
Comment[sv]=Anslut till en annan dator med RDP eller VNC
Comment[tr]=Başka bir bilgisayara RDP veya VNC ile bağlan
Comment[uk]=З'єднання з іншим комп'ютером за допомогою RDP або VNC
Comment[zh_CN]=通过 RDP 或 VNC 连接到另一台计算机
Comment[zh_TW]=以 RDP 或 VNC 連線到其他電腦
X-DocPath=krdc/index.html
StartupWMClass=krdc
MimeType=x-scheme-handler/vnc;x-scheme-handler/rdp;application/x-krdc;
Categories=Qt;KDE;Network;RemoteAccess;
X-KDE-Wayland-Interfaces=org_kde_kwin_keystate
X-Flatpak=org.kde.krdc
+2 -2
View File
@@ -111,7 +111,7 @@ in rec {
defaultFor = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
example = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ];
example = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ];
description = ''
MIME types / `x-scheme-handler/<scheme>` the app becomes the default
and a recommended handler for (`xdg.mimeApps`, Added Associations:
@@ -122,7 +122,7 @@ in rec {
settings = lib.mkOption {
type = lib.types.attrsOf (lib.types.nullOr lib.types.str);
default = { };
example = { Name = "Element (wallet)"; Keywords = null; };
example = { Name = "Signal (wallet)"; Keywords = null; };
description = ''
`[Desktop Entry]` keys to set or override (value in key-file syntax,
as given); `null` removes a key. Either way the key's localized
+4 -4
View File
@@ -65,11 +65,11 @@
# # org.jellyfin.JellyfinDesktop yourself); gives it devices=all:
# jellyfin.hardwareDecoding.enable = true;
# # Apps that keep logins in the KDE wallet: one wallet for both
# # sessions (Element: install im.riot.Riot yourself):
# launchers."im.riot.Riot" = {
# # sessions (install the Signal Flatpak org.signal.Signal yourself):
# launchers."org.signal.Signal" = {
# keyring = { enable = true; electron = true; };
# # SSO callback:
# defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ];
# # link callbacks:
# defaultFor = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ];
# };
# docker.enable = true; # rootless Docker, user service
# };