Ovládání dvou aplikací v GUI současně

Ovládání dvou aplikací v GUI současně
« kdy: 29. 10. 2026, 01:04:00 »
Ahoj,

mám spuštěné dvě aplikace, jejich okna vedle sebe.

Nutně bych potřeboval způsob, jak je ovládat obě současně BEZ PŘEPÍNÁNÍ mezi nima.

Ideálně z jedné klávesnice. Tedy že některé klávesy/klávesové zkratky by šly do první aplikace a některé  do druhé aplikace.

(pozn: případně by se klávesa/klávesová zkratka ještě zkonvertovala na jinou, například když v obou aplikacích má šipka-do-prava nějaký význam, tak bych šipku doprava "vyvolal" zmáčknutím nějaké klávesové kombinace pro jednu aplikaci a jiné klávesové kombinace pro druhou aplikaci)


Varianty, pokud by nešlo to výše:
- mít do PC připojeny dvě klávesnice a každá směrovaná do jedné z obou aplikací
- ovládat jednu aplikaci z klávesnice a druhou z myši (to už je ale hodně mizerný workaround)
- ovládat jednu aplikaci nějakým dálkovým ovládáním a druhou z klávesnice (nebo mít dvě dálková ovládání, každé na jednu i nich)


Aktuálně to potřebuju v následujícím use case:
(ale jsem přesvědčen, že už jsem to parkrát potřeboval i v odlišných)

První aplikace je prohlížeč PDF. Potřebuju v něm především chodit vpřed a vzad.

Druhá aplikace je přehrávač videa. Chodím zpět o pár vteřin a zase dopředu, občas měním hlasitost a rychlost, ostatní ovládání méně často.

*

Pozn: používám KDE Plasma na Waylandu a používám Windows 11. Pokud to bude řešením, tak klidně na PC nainstaluju cokoli jiného.






Re:Ovládání dvou aplikací v GUI a to současně
« Odpověď #1 kdy: 29. 10. 2026, 02:44:17 »
Ak si dobre pamatam, tak xdotool, pri konfiguracii skriptov vyzadoval nazov okna, ktoremu posiela imput z klavesnice/mysi,
Ale bezi to len pod Xwindow. Ostatne vypatraj cez AI.

Re:Ovládání dvou aplikací v GUI a to současně
« Odpověď #2 kdy: 29. 10. 2026, 02:56:29 »
ja jsem na tohle kdysi pouzival vlc a global hotkeys. bylo to na widlich ale podle rychlyho googlu to jde na linuxu taky. tzn mas fokus na pdfku zkraky jako obvykle a vlc ovladas global hotkeys i kdyz nema fokus.

Re:Ovládání dvou aplikací v GUI současně
« Odpověď #3 kdy: 29. 10. 2026, 09:18:26 »
Co nejaky 'MIDI kontroler'? Ja si neco podobneho ubastlil z ProMicro + par tlacitek a potenciometru...
Edit: Nevynalezal jsem kolo, v projektu jsem pouzil https://github.com/tttapa/Control-Surface.

Re:Ovládání dvou aplikací v GUI současně
« Odpověď #4 kdy: 29. 10. 2026, 12:50:27 »
Na Win by to mohlo jít zbastlit pomocí AutoHotKey (jestli to ve Win11 ještě funguje), ale to má takovou brutální syntaxi snad ještě horší než Visual Basic. K tomu SumatraPDF, dá se ovládat i přes DDE (ale mezi těmi příkazy nevidím skrolování a skok na další stránku).

MIDI kontroler spíš s enkodérama přepnutýma do relativního režimu (posílaly by +- rozdíl v pozici), než s potenciometrama nebo táhlama (posílají jenom 7b absolutní pozici). A s USB konektorem, ať není potřeba převodník z 5p DIN MIDI. Ale pak může být problém, jak ty MIDI zprávy dostat do VLC (možná má nějaký plugin), nebo jak je namapovat na stisky kláves.

Nebo nějaký kolečka k video editorům (jog wheel), ale to asi bude vzhledem k využití drahé (např. Contour Design Multimedia Controller Xpress).

Dvě klávesnice ve Win takhle myslím použít nejdou, protože Windows vstup ze všech klávesnic na hodně nízké úrovni spojují do jednoho streamu, takže není poznat, odkud který stisk přišel. (pokud to ve Win11 nějak nezměnili)


Re:Ovládání dvou aplikací v GUI současně
« Odpověď #5 kdy: 29. 10. 2026, 16:26:30 »
Univerzální řešení: Dvakrát virtuální pc, každý se svou aplikací a svojí klávesnicí.

Další možnost je D-Bus nebo KDE Connect.

jjrsk

  • *****
  • 995
Re:Ovládání dvou aplikací v GUI současně
« Odpověď #6 kdy: 29. 10. 2026, 16:27:36 »
Citace od: Honzan . kdy 29. 10. 2026, 01:04:00
...
Pokud mi pamet slouzi, tak presne tohle slo v Xkach nastavit. Neco jako keymapping se to jmenovalo. Na shitlandu to tudiz predpokladam nejde nijak.

Mno a na widlich ... https://powertoy.net/utilities/keyboard-manager/ jen se obavam, ze to taky musi umet ta konkretni aplikace.

Re:Ovládání dvou aplikací v GUI současně
« Odpověď #7 kdy: 29. 10. 2026, 16:59:59 »
@Honzan

Nevím, na co přesně tohle chcete, ale řešil jsem něco podobného na úpravu dialogů a překlady.
Kdy je uživatel v jedné aplikaci (kupříkladu Word, kde si dělá úpravy) a zároveň pak ovládá druhou aplikaci s videopřehrávačem aniž by se musel přepínat nebo ztrácel fokus.

Windows přehrávač mpv.net (upravený mpv) přehraje téměř cokoliv a má možnost nastavit globální klávesové zkratky. takže jakmile se spustí, tak je odchytává bez ohledu na to jestli je ve fokusu.
https://github.com/mpvnet-player/mpv.net

V souboru
%AppData%\Roaming\mpv.net\global-input.conf

Může pak být třeba tohle:


F13       no-osd set speed 1;script-message mpv.net play-pause
F14       frame-back-step
F15       frame-step
F16       seek -0.5
F17       seek 0.5
F18       multiply speed 0.5;set pause no
F19       multiply speed 2;set pause no


Schválně jsem namapoval volné klávesy, co nemají žádnou funkci v ostatních aplikacích.

Následně jsem použil tenhle USB kontroler..
https://www.contourdesign.eu/product/contour-multimedia-controller-xpress
https://www.syntex.cz/contour-design-shuttlexpress

Ten umožní v ovládacím software nastavit, co za kláv. zkratku se přiřadí ke stisku daného tlačítka, případně otočení kolečka.
Soft vypadá zhruba takhle:
https://rigpi.net/help/contour-shuttlexpress.html
Důležité je, aby se odmazaly všechny nepotřebné profily pro aplikace a tahle mapování se pak nastavila jako "Global settings", protože standardně to může posílat různé zkratky podle aplikace ve fokusu a už je tam přednastaveno spousty standardních aplikací (Word, browsery atp.).

Funguje to, řekl bych velice pěkně.
Dopsal jsem tam ještě do přehrávače mpv následně nějaké další skripty na přepínání zvuků (pokud jsou v každém kanálu/stopě různé jazyky) atp. Je to velmi flexibilní.

Re:Ovládání dvou aplikací v GUI současně
« Odpověď #8 kdy: 03. 11. 2026, 16:22:32 »
Ahoj.
Toto jsem pouzival na x11 s icewm cca pred 15 lety:
#!/bin/bash
PARAMETR=$1
KBS1[0]="HID 04d9:2519"
POS1[0]="HID 04d9:2519 Mouse"
#POS1[1]="Microsoft Microsoft 3-Button Mouse with IntelliEye(TM)"
#KBS1[1]="Dell Dell USB Entry Keyboard"
POS1[1]="YK 2.4G Wireless Device Mouse"
KBS1[1]="YK 2.4G Wireless Device"
MAS1="blabla"

for ((i=0;i<"${#KBS1[@]}";i++))
do
        KB1[$i]=$(xinput list | sed -e "s/^.\+[[:blank:]]${KBS1[$i]}[[:blank:]]\+id=\([0-9]\+\)[[:blank:]]\+\[floating slave]\$\|^.\+[[:blank:]]${KBS1[$i]}[[:blank:]]\+id=\([0-9]\+\)[[:blank:]]\+\[slave[[:blank:]]\+keyboard[[:blank:]]\+([0-9]\+)\]\$/\1\2/ p ;d")
done
for ((i=0;i<"${#POS1[@]}";i++))
do
        PO1[$i]=$(xinput list | sed -e "s/^.\+[[:blank:]]${POS1[$i]}[[:blank:]]\+id=\([0-9]\+\)[[:blank:]]\+\[floating slave]\$\|^.\+[[:blank:]]${POS1[$i]}[[:blank:]]\+id=\([0-9]\+\)[[:blank:]]\+\[slave[[:blank:]]\+pointer[[:blank:]]\+([0-9]\+)\]\$/\1\2/ p ;d")
done
#xinput list
for ((i=0;i<"${#POS1[@]}";i++))
do
        echo "pointer  ${PO1[$i]}      ${POS1[$i]}"
done
for ((i=0;i<"${#KBS1[@]}";i++))
do
        echo "keyboard  ${KB1[$i]}      ${KBS1[$i]}"
done

case $PARAMETR in
(2)
        MAPO1="$(xinput list | sed -e "s/^.[[:blank:]]${MAS1} pointer[[:blank:]]\+id=\([0-9]\+\).*/\1/ p ;d")"
        echo "xinput --remove-master ${MAPO1}"
        [ "${MAPO1}" ] && xinput --remove-master "${MAPO1}"
        echo "xinput --create-master ${MAS1}"
        xinput --create-master ${MAS1}
        MAPO1="$(xinput list | sed -e "s/^.[[:blank:]]${MAS1} pointer[[:blank:]]\+id=\([0-9]\+\).*/\1/ p ;d")"
        MAKB1="$(xinput list | sed -e "s/^.[[:blank:]]${MAS1} keyboard[[:blank:]]\+id=\([0-9]\+\).*/\1/ p ;d")"
        for ((i=0;i<"${#POS1[@]}";i++))
        do
                echo "xinput reattach ${PO1[$i]} ${MAPO1}"
                xinput reattach ${PO1[$i]} "${MAPO1}"
        done
        for ((i=0;i<"${#KBS1[@]}";i++))
        do
                echo "xinput reattach ${KB1[$i]} ${MAKB1}"
                xinput reattach ${KB1[$i]} "${MAKB1}"
        done
        ;;
(1)
        MAPO1="$(xinput list | sed -e "s/^.[[:blank:]]${MAS1} pointer[[:blank:]]\+id=\([0-9]\+\).*/\1/ p ;d")"
        echo "xinput --remove-master $MAPO1"
        [ "${MAPO1}" ] && xinput --remove-master "${MAPO1}"

        MAPO1="$(xinput list | sed -e "s/^.[[:blank:]]Virtual core pointer[[:blank:]]\+id=\([0-9]\+\).*/\1/ p ;d")"
        MAKB1="$(xinput list | sed -e "s/^.[[:blank:]]Virtual core keyboard[[:blank:]]\+id=\([0-9]\+\).*/\1/ p ;d")"
        for ((i=0;i<"${#POS1[@]}";i++))
        do
                echo "xinput reattach ${PO1[$i]} ${MAPO1}"
                xinput reattach ${PO1[$i]} "${MAPO1}"
        done
        for ((i=0;i<"${#KBS1[@]}";i++))
        do
                echo "xinput reattach ${KB1[$i]} ${MAKB1}"
                xinput reattach ${KB1[$i]} "${MAKB1}"
        done
        ;;
esac
Mel jsem 2 sady klavesnice/mys pri praci ve dvou lidech, kdy kazdy mohl psat do jineho - nebo pripadne toho sameho okna. Chovalo se to tak, ze kazda sada mela focus nekde jinde.
Jak je videt, manzelka nalila do puvodni klavesnice cervene vino, tak jsem ji vymenil(klavesnici).
Bylo to az prekvapive pouzitelne.
Treba to nejaka ai umi prepsat pro wayland?