Hoe Global Hotkeys aan een WINE-programma onder Linux te binden
Heb je ooit een Windows-programma onder Linux onder WINE geïnstalleerd, om erachter te komen dat het niet langer de hotkeys van het systeem bindt? HTG heeft het werk waar u naar op zoek was.
Afbeelding door djeucalyptus
Overzicht
Iedereen die zelfs heeft nagedacht over het idee om over te schakelen naar Linux, heeft waarschijnlijk heel snel het probleem dat er een Windows-app is die je moet gebruiken. We hebben je al laten zien dat je dit kunt bereiken met WINE.
Voor deze schrijver was de applicatie een Text-To-Speech-toepassing die gebruikmaakt van de Microsoft SAPI4-engine. Het installeren van het programma onder WINE was een koud kunstje, maar toen ik klaar was, ontdekte ik snel dat de sneltoetsen die gebruikt werden om de verschillende acties van het programma te starten (starten met lezen, stoppen met lezen, enz.) Niet functioneerden en dat dit een bekend gegeven is probleem met WINE.
Ik ben blij om te zeggen dat na eonen van zoeken, ik eindelijk de oplossing heb gevonden in de vorm van een GNU-hulpprogramma dat de X.org-interface kan manipuleren met behulp van native functies. Hoewel niet de enige in zijn soort, was xdotool degene die het gemakkelijkst aan de slag ging en al in de Ubuntu / Mint-opslagplaatsen zat.
xdotool
Het xdotool-programma kan veel venstergerelateerde taken van de CLI uitvoeren, met dat gezegd zijnde, de enige twee die we gaan gebruiken zijn "zoeken" en "sleutel". De "zoek" -functie doet precies dat, zoekt naar een venster / s-ID volgens de parameters die u ervoor hebt ingesteld. Met de "sleutel" -functie kunt u een toetsaanslag simuleren naar een venster-ID.
Installatie en configuratie
Er wordt van uitgegaan dat u WINE en het programma dat u daaronder gebruikt, al hebt geïnstalleerd. In dit voorbeeld gebruiken we Balabolka als de "Windows" -toepassing omdat het een goede freeware-replica is van het originele programma waarvoor ik deze oplossing nodig had (2e spraakcentrum).
Als u ervoor hebt gekozen Balabolka ook te gebruiken, moet u de mogelijkheid om de sneltoetsen te activeren activeren.
Opmerking: misschien wilt u TTSReader of 2e spraakcentrum installeren, zelfs in demomodus, zodat de SAPI-stemmen worden geïnstalleerd.
Open het programma en ga naar instellingen (Shift + F6) onder "Opties" -> "Instellingen".
Ga naar het tabblad sneltoetsen en vink het selectievakje "Gebruik globale sneltoetsen" aan.
Klik OK.
Laat het op de achtergrond lopen, zodat het zijn werk kan doen als we de toetsaanslagen eraan vasthaken.
Installeer xdotool door het volgende uit te geven:
sudo apt-get install xdotool
Wereldwijde binding
Het xdotool-programma op zichzelf helpt ons niet om wereldwijd aan sneltoetsen te binden, maar we kunnen het bestaande sneltoets-systeem van het besturingssysteem gebruiken. Wat we zullen doen is een eenvoudig script maken dat xdotool gebruikt om de toetsaanslagen die we willen naar het Balabolka-programma te verzenden en het te bellen vanuit het sneltoets-systeem van het besturingssysteem.
Maak een script met de naam "start_read.sh" met de volgende inhoud:
xdotool key --window $ (xdotool search --limit 1 --all --pid $ (pgrep balabolka) --name Balabolka) "ctrl + alt + F9"
Maak deze keer een ander script met de naam "stop_read.sh" met de volgende inhoud:
xdotool key --window $ (xdotool search --limit 1 --all --pid $ (pgrep balabolka) --name Balabolka) "ctrl + alt + F7"
Opmerking: ik weet dat dit een one-liner is waarvoor geen script nodig is, maar het Mint / Ubuntu-programma 'Keyboard Shortcuts' werkte niet mee door het rechtstreeks aan te roepen. Als je weet hoe je het moet doen, deel het dan in de reacties hieronder.
Het afremmen van dit commando op zijn componenten, wat we zien is:
- Het "-pid $ (pgrep balabolka)" deel, voert een "pgrep" uit van het programma dat we willen gebruiken om de proces-ID te achterhalen. Dit zal de xdotool van "search" verkleinen tot alleen die PID.
- Het "xdotool search -limit 1 -all ... -name Balabolka" -gedeelte, vernauwt de gedeponeerde zoekopdracht van xdotool nog meer en beperkt de geretourneerde antwoorden tot 1. Zoals in ons geval maakt het niet uit welke van de venster-id's die worden geretourneerd van de programma, het beperken van het resultaat werkt als een formatter voor de opdracht "key". Misschien vindt u dat u dit onderdeel meer moet masseren als dit van belang is voor het programma dat u gebruikt.
- De "xdotool key -window% WINDOW_ID%" ctrl + alt + F7 "" part, stuurt de gewenste toetsaanslag naar de windowID die werd verkregen door de vorige delen.
Maak de scripts uitvoerbaar.
Linux Mint-toetsenbord snelkoppelingen
Onder Linux Mint worden de globale sneltoetsen ingesteld in het programma "Keyboard Shortcuts".
Eenmaal geopend Klik op "Toevoegen" om een nieuwe aangepaste snelkoppeling te maken:
Geef het een naam en geef onder "Command" het volledige pad naar een van de scripts die we hierboven hebben gemaakt. Herhaal het proces voor het tweede script.
Klik nu in de kolom "Snelkoppelingen" op het woord "Uitgeschakeld" om de optie te krijgen om een nieuwe toetscombinatie in te stellen.
Opmerking: u kunt, als u dat wilt, iets anders gebruiken dan de standaardinstelling van het programma. In zekere zin het creëren van een "remap" op belangrijke bindingen die, afhankelijk van het programma dat u gebruikt, anders buiten uw controle zouden zijn.
Raak de combo die je hebt geselecteerd en hoor de magie.
Ubuntu-toetsenbord
Onder Ubuntu wordt het programma dat de globale sneltoetsen zet gewoon "toetsenbord" genoemd.
Schakel over naar het tabblad "Snelkoppelingen" en selecteer "Aangepaste snelkoppelingen".
Klik op het plusteken om een snelkoppeling toe te voegen. Geef het een naam en geef onder "Command" het volledige pad naar een van de scripts die we hierboven hebben gemaakt. Herhaal het proces voor het tweede script.
Klik nu op het woord "Uitgeschakeld" om de optie te krijgen om een nieuwe toetscombinatie in te stellen.
Opmerking: Herhaal op de notitie van de sectie Mint, u kunt, als u dat wilt, iets anders gebruiken dan de standaardinstelling van het programma. In zekere zin het creëren van een "remap" op belangrijke bindingen die, afhankelijk van het programma dat u gebruikt, anders buiten uw controle zouden zijn.
Notities van de auteur
Elke keer als ik serieus overwogen heb om naar Linux te verhuizen, was dit probleem de eerste op mijn lijst met problemen. Het is niet dat Linux geen problemen heeft, maar dit was de echte hindernis voor mij. Ik heb het keer op keer geprobeerd, vrienden / mensen in het veld gevraagd en het zelfs tot een beloning gemaakt ... Ik ben blij dat deze saga voorbij is en dat mijn ziel eindelijk kan rusten.
Ik hoop dat ik iemand daar heb geholpen om niet dezelfde beproeving te doorstaan.
Doc Brown: Het heeft me bijna dertig jaar gekost en mijn hele familie fortuin om de visie van die dag te realiseren. Mijn God, is het zo lang geleden?