Hjemmeside » hvordan » Sådan binder Global HotKeys til et WINE-program under Linux

    Sådan binder Global HotKeys til et WINE-program under Linux

    Har du nogensinde installeret et Windows-program i Linux under WINE, for kun at opdage, at det ikke binder systembrede genvejstaster længere? HTG har det arbejde, du har ledt efter.

    Billede af djeucalyptus

    Oversigt

    Alle, der selv har tænkt på ideen om at skifte til Linux, har sandsynligvis meget hurtigt støder på problemet, at der er denne ene Windows-app, som du behøver at fungere. Vi har allerede vist dig at du kan opnå dette ved hjælp af WINE.

    For denne forfatter var applikationen en tekst-til-tale-applikation, der anvender Microsoft SAPI4-motoren. Installering af programmet under WINE var en brise, men efter færdiggørelsen har jeg hurtigt fundet ud af, at de hot-keys, der bruges til at udløse de forskellige handlinger i programmet (begynder at læse, stoppe læsning osv.) Ikke fungerede, og at dette er kendt problem med vin.

    Jeg er glad for at sige, at efter eons of searching har jeg endelig fundet løsningen i form af et GNU-værktøj, som kan manipulere X.org-grænsefladen ved hjælp af native funktioner. Selvom den ikke er den eneste af sin art, er xdotool den, der var den nemmeste at få arbejde og var allerede i Ubuntu / Mint-repositorierne.

    xdotool

    Xdotool programmet kan gøre mange vindue relaterede opgaver fra CLI, med det sagt, de eneste to vi skal bruge er "search" og "key". "Søg" -funktionen gør netop det, søger efter et vindues / s-ID i henhold til de parametre, du har indstillet til det. Funktionen "nøgle" giver dig mulighed for at simulere en nøgleslag til et vindues-id.

    Installation og konfiguration

    Det antages, at du allerede har installeret WINE og det program du har brug for under det. I dette eksempel bruger vi Balabolka som "Windows" -applikationen, fordi det er en god freeware replika af det originale program, jeg havde brug for denne løsning til (2. talesenter).

    Hvis du har valgt at bruge Balabolka, skal du aktivere dens hurtigtaster.
    Bemærk: Du kan muligvis installere enten TTSReader eller 2. talesenter selv i demo-tilstand, så SAPI-stemmerne bliver installeret. 

    Åbn programmet og gå til indstillinger (Skift + F6) under "Valg" -> "Indstillinger".

    Gå til hotkeys fanen og markér afkrydsningsfeltet for "Brug globale hotkeys".

    Klik på OK.

    Lad det køre i baggrunden, så det kan gøre sit job, når vi hakker tastetrykket til det.

    Installer xdotool ved at udstede:

    sudo apt-get install xdotool

    Global binding

    Xdotool-programmet i sig selv hjælper os ikke med at binde globalt til genvejstaster, men vi kan bruge det eksisterende hotkey-system. Hvad vi vil gøre er at oprette et simpelt script, der anvender xdotool til at sende tastetryk, som vi vil have til Balabolka-programmet og kalde det fra OS'ens hotkey-system.

    Opret et script kaldet "start_read.sh" med følgende indhold:

    xdotool key --window $ (xdotool search --limit 1 --all --pid $ (pgrep balabolka) - navn Balabolka) "ctrl + alt + F9"

    Opret et andet script denne gang kaldet "stop_read.sh" med følgende indhold:

    xdotool key --window $ (xdotool søgning --limit 1 --all --pid $ (pgrep balabolka) - navn Balabolka) "ctrl + alt + F7"

    Bemærk: Jeg ved, at dette er en liner, der ikke kræver et script, men Mint / Ubuntu "Keyboard Shortcuts" -programmet, samarbejdede ikke med bare at kalde det direkte. Hvis du ved hvordan du gør det, kan du dele i kommentarerne nedenfor.

    Bremser denne kommando til sine komponenter, det vi ser er:

    • "-Pid $ (pgrep balabolka)" -delen udfører en "pgrep" på det program, vi vil bruge til at fastslå dets proces-id. Dette vil indsnævre xdotool arkiveret af "søgning" til netop det PID.
    • "Xdotool search -limit 1 -all ... -name Balabolka" del, indsnævrer søgningen af ​​xdotool endnu mere og begrænser de returnerede svar til 1. Som i vores tilfælde er det ligegyldigt, hvilken af ​​vindues-ID'erne, der returneres af program, der begrænser resultatet virker som en formatter for kommandoen "key". Du må måske finde, at du skal massage denne del mere, hvis det gør noget for det program, du bruger.
    • "Xdotool-tasten -vind% WINDOW_ID%" ctrl + alt + F7 "", sender den ønskede tastetryk til vinduetID, som blev opnået af de foregående dele.

    Gør scripts eksekverbare.

    Linux Mint Keyboard genveje

    Under Linux Mint er de globale genvejstaster indstillet i "Tastaturgenveje" -programmet.

    Når du har åbnet Klik på "Tilføj" for at oprette en ny brugerdefineret genvej:

    Giv det et navn, og under "Command" gives hele vejen til et af de scripts, vi har lavet ovenfor. Gentag processen for det andet script.

    Nu, i "Genvejskolonnen", klik på "Disabled" ordet for at få mulighed for at indstille en ny nøglekombination.
    Bemærk: Du kan, hvis du ønsker, bruge noget andet end programmets standard. På en måde skaber en "remap" til nøglebindinger, der ellers afhænger af det program du bruger, ellers ville være uden for din kontrol.

    Tryk på den combo du har valgt og hør den magiske.

    Ubuntu-tastatur

    Under Ubuntu kaldes det program, der angiver de globale tastaturer, bare "Keyboard".

    Skift til fanen "Genveje" og vælg "Brugerdefinerede genveje".

    Klik på plustegnet for at tilføje en genvej. Giv det et navn, og under "Command" gives hele vejen til et af de scripts, vi har lavet ovenfor. Gentag processen for det andet script.
    Klik nu på "Disabled" ordet for at få mulighed for at indstille en ny nøglekombination.

    Bemærk: Gentag på noten fra Mint sektionen kan du, hvis du ønsker det, bruge noget andet end programmets standard. På en måde skaber en "remap" til nøglebindinger, der ellers afhænger af det program du bruger, ellers ville være uden for din kontrol.

    Forfatterens noter

    Hver gang jeg seriøst overvejet at flytte til Linux, var dette problem den første på min liste over problemer. Det er ikke, at Linux ikke har problemer, men det var den virkelige forhindring for mig. Jeg har prøvet tid og tid igen, spurgte venner / folk på banen og endda gjort det til en summende ... Jeg er glad denne saga er forbi, og at min sjæl endelig kan hvile.
    Det er mit håb, at jeg har hjulpet nogen derude for ikke at skulle gennemgå samme prøvelse.


    Doc Brown: Det har taget mig næsten tredive år og hele min familieformue at realisere visionen om den dag. Min Gud, har det været så længe?