Hemsida » hur » Så här kopplar du Global HotKeys till ett WINE-program under Linux

    Så här kopplar du Global HotKeys till ett WINE-program under Linux

    Har du någonsin installerat ett Windows-program i Linux under WINE, bara för att upptäcka att det inte binder systembrett snabbtangenter längre? HTG har det arbete du letat efter.

    Bild av djeucalyptus

    Översikt

    Alla som ens har tänkt på idén att byta till Linux har antagligen mycket snabbt stött på problemet att det finns den här Windows-appen som du behöver fungera. Vi har redan visat att du kan uppnå detta med WINE.

    För denna författare var applikationen en text-till-tal-applikation som använder Microsoft SAPI4-motorn. Installationen av programmet under WINE var en bris, men efter avslutad tid har jag snabbt upptäckt att hettangenterna som används för att utlösa programmets olika åtgärder (börja läsa, sluta läsa etc) fungerade inte och att detta är en känd problem med vin.

    Jag är glad att säga att efter eons of search har jag äntligen hittat lösningen i form av ett GNU-verktyg som kan manipulera X.org-gränssnittet med inbyggda funktioner. Medan inte den enda i sitt slag är xdotool den som var lättast att få jobba och var redan i Ubuntu / Mint-repositoriesna.

    xdotool

    Xdotoolprogrammet kan göra många fönsterrelaterade uppgifter från CLI, med det sagt, de enda två vi ska använda är "sök" och "nyckel". Sökfunktionen gör just det, söker efter ett fönster / s-ID enligt parametrar som du ställt in för det. Funktionen "nyckel" gör det möjligt för dig att simulera en nyckel-stroke till ett fönster-ID.

    Installation och konfiguration

    Det antas att du redan har installerat WINE och det program du behöver under det. I det här exemplet använder vi Balabolka som "Windows" -applikationen eftersom det är en bra freeware-replika av det ursprungliga programmet jag behövde denna lösning för (2: e talcenter).

    Om du har valt att använda Balabolka måste du aktivera dess snabbtangenter.
    Obs! Du kanske vill installera antingen TTSReader eller 2: e talcenter, även i demoläge, så att SAPI-rösterna kommer att installeras. 

    Öppna programmet och gå till inställningar (Shift + F6) under "Alternativ" -> "Inställningar".

    Gå till snabbtangentfliken och markera kryssrutan för "Använd globala snabbtangenter".

    Klicka på OK.

    Låt det gå i bakgrunden så att det kan göra sitt jobb när vi hakar tangenttryckningarna till det.

    Installera xdotool genom att utfärda:

    sudo apt-get installera xdotool

    Global bindning

    Xdotool-programmet på egen hand hjälper oss inte att binda globalt till snabbtangenter, men vi kan använda det redan existerande operativsystemet för snabbtangenter. Vad vi ska göra är att skapa ett enkelt skript som använder xdotool för att skicka de tangenttryckningar vi vill ha till Balabolka-programmet och kalla det från operativsystemet OS.

    Skapa ett skript som heter "start_read.sh" med följande innehåll:

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

    Skapa ett annat skript den här gången som heter "stop_read.sh" med följande innehåll:

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

    Obs! Jag vet att det här är ett liner som inte kräver ett skript, men programmet Mint / Ubuntu "Tangentbordsgenvägar", samarbetade inte med att bara anropa det direkt. Om du vet hur du gör det, vänligen dela i kommentarerna nedan.

    Bromsning av detta kommando till dess komponenter, det vi ser är:

    • Parten "-pid $ (pgrep balabolka)" utför en "pgrep" på det program vi vill använda för att fastställa dess process ID. Detta kommer att begränsa xdotolen som är arkiverad av "sök" till bara den PID.
    • Den "xdotool search -limit 1 -all ... -name Balabolka" -delen, begränsar sökningen till xdotool ännu mer och begränsar de returnerade svaren till 1. Som i vårt fall spelar det ingen roll vilken av fönstret ID-erna som returneras av program, vilket begränsar resultatet fungerar som en formaterare för "nyckel" -kommandot. Det kan hända att du behöver massera den här delen mer om det spelar roll för det program du använder.
    • "Xdotool-knappen -window% WINDOW_ID%" ctrl + alt + F7 "", skickar önskad knapptryckning till windowID som erhölls av tidigare delar.

    Gör skriptna körbara.

    Linux Mint Keyboard genvägar

    Under Linux Mint sätts de globala snabbtangenterna i "Tangentbordsgenvägar" -programmet.

    En gång öppnad Klicka på "Lägg till" för att skapa en ny anpassad genväg:

    Ge det ett namn och under "Kommando" ge hela sökvägen till ett av de skript vi har skapat ovan. Upprepa processen för det andra skriptet.

    Klicka på "Disabled" ordet i "Shortcuts" kolumnen för att få möjlighet att ställa in en ny nyckelkombination.
    Obs! Du kan, om du vill, använda något annat än programmets standard. På ett sätt som skapar en "remap" till nyckelbindningar som annars skulle vara otillgängliga, beroende på vilket program du använder.

    Hit den kombinationsruta du har valt och hör den magiska.

    Ubuntu-tangentbord

    Under Ubuntu heter programmet som sätter de globala snabbtangenterna bara "Keyboard".

    Byt till fliken "Genvägar" och välj "Anpassade genvägar".

    Klicka på plustecknet för att lägga till en genväg. Ge det ett namn och under "Kommando" ge hela sökvägen till ett av de skript vi har skapat ovan. Upprepa processen för det andra skriptet.
    Klicka nu på "Disabled" ordet för att få möjlighet att ställa in en ny nyckelkombination.

    Obs! Upprepa på noten från Myntsektionen kan du, om du vill, använda något annat än programmets standard. På ett sätt som skapar en "remap" till nyckelbindningar som annars skulle vara otillgängliga, beroende på vilket program du använder.

    Författarens anteckningar

    Varje gång jag seriöst övervägt att flytta till Linux var den här problemet den första på min lista över problem. Det är inte så att Linux inte har problem, men det var den verkliga hinderen för mig. Jag har provat gång på gång, frågade vänner / personer på fältet och till och med gjort det till en bounty ... Jag är glad den här sagan är över och att min själ äntligen kan vila.
    Det är mitt hopp att jag har hjälpt någon där ute för att inte behöva gå igenom samma prövning.


    Doc Brown: Det har tagit mig nästan trettio år och hela familjen förmögenhet att förverkliga visionen av den dagen. Min Gud, har det varit så länge?