{"id":55206,"date":"2020-01-15T00:00:00","date_gmt":"2020-01-14T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/alternativnoe-upravlenie-oknami-v-linux"},"modified":"2020-02-18T14:03:18","modified_gmt":"2020-02-18T11:03:18","slug":"alternativnoe-upravlenie-oknami-v-linux","status":"publish","type":"post","link":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","title":{"rendered":"Alternatief vensterbeheer in Linux","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ik ben iemand die de Caps Lock gebruikt om de indeling te schakelen, omdat ik te lui ben om twee toetsen in te drukken als ik er \u00e9\u00e9n kan indrukken. Ik zou zelfs twee onnodige toetsen willen: \u00e9\u00e9n voor het activeren van de Engelse indeling en de andere voor de Russische. Maar de tweede onnodige toets is voor het oproepen van het contextmenu, dat zo overbodig is dat het door veel laptopfabrikanten wordt verwijderd. Dus moet ik het doen met wat ik heb. <\/p>\n<p><\/p>\n<p>En daarnaast wil ik bij het schakelen tussen vensters niet op zoek naar hun pictogrammen op de taakbalk, of de namen volgen terwijl ik scroll door <em>Alt+Tab<\/em>, bureaubladen bladeren, enz. Ik wil een toetscombinatie indrukken (idealiter eigenlijk \u00e9\u00e9n, maar er zijn al geen vrije onnodige toetsen meer) en direct in het venster komen dat ik nodig heb. Bijvoorbeeld zo:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: Firefox<\/li>\n<li>Alt+D: Firefox (Priv\u00e9 Browsen)<\/li>\n<li>Alt+T: Terminal<\/li>\n<li>Alt+M: Rekenmachine<\/li>\n<li>Alt+E: IntelliJ Idea<\/li>\n<li>enz.<\/li>\n<\/ul>\n<p><\/p>\n<p>En bij het indrukken van bijvoorbeeld <em>Alt+M<\/em> wil ik de rekenmachine zien ongeacht of deze programma momenteel draait. Als het draait, moet de focus naar dat venster worden overgedragen, en als dat niet zo is, start het gewenste programma en geef de focus zodra het is geladen.<\/p>\n<p><\/p>\n<p>Voor gevallen die niet door het vorige scenario worden gedekt, wil ik universele toetscombinaties hebben waarop ik gemakkelijk elke open venster kan toewijzen. Bijvoorbeeld, ik heb 10 combinaties toegewezen van <em>Alt+1<\/em> tot <em>Alt+0<\/em>, die aan geen enkel programma zijn gekoppeld. Ik kan gewoon drukken op <em>Alt+1<\/em> , en het venster dat momenteel in focus is, zal de focus krijgen wanneer ik op druk. <em>Alt+1<\/em>.<\/p>\n<p><\/p>\n<p>Onder deze tekst staat een beschrijving van nog een paar functies en een antwoord op hoe je dit kunt doen. Maar ik waarschuw je vooruit dat een dergelijke personalisatie \"voor jezelf\" een sterke afhankelijkheid kan oproepen en zelfs ontwenning kan veroorzaken als je Windows, Mac OS of zelfs iemand anders zijn computer met Linux moet gebruiken.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Als je erover nadenkt, gebruiken we eigenlijk niet zoveel programma's dagelijks. Een browser, terminal, IDE, een of andere messenger, bestandsbeheerder, rekenmachine en dat is vrijwel alles. Je hebt niet zoveel toetscombinaties nodig om 95% van de alledaagse taken te dekken.<\/p>\n<p><\/p>\n<p>Voor programma's met meerdere open vensters kan \u00e9\u00e9n ervan als hoofdvenster worden ingesteld. Bijvoorbeeld, er zijn meerdere IntelliJ Idea-vensters open, ingesteld op <em>Alt+E.<\/em>In normale omstandigheden, wanneer je op <em>Alt+E.<\/em> drukt, zal er een venster van dat programma worden geopend, waarschijnlijk het eerste dat is geopend. Maar als je op drukt <em>Alt+E.<\/em> Wanneer een van de vensters van dit programma al in focus is, zal dat venster de hoofdvenster worden en zal de focus bij daaropvolgende toetscombinaties aan dit venster worden doorgegeven. <\/p>\n<p><\/p>\n<p>Het hoofdvenster kan opnieuw worden toegewezen. Om dit te doen, moet de combinatie eerst worden gereset, en vervolgens moet een ander venster als hoofdvenster worden toegewezen. Om de combinatie te resetten, moet u dezelfde combinatie opnieuw indrukken, gevolgd door de speciale resetcombinatie, die voor mij is toegewezen aan <em>Alt+Backspace<\/em>. Dit zal een script oproepen dat de toewijzing van het hoofdvenster voor de vorige combinatie ongedaan maakt. Daarna kan een nieuw hoofdvenster worden toegewezen zoals in de vorige alinea beschreven. Het resetten van het gekoppelde venster naar universele combinaties gebeurt op dezelfde manier.<\/p>\n<p><\/p>\n<p>De inleiding is misschien lang geworden, maar ik wilde eerst uitleggen wat we gaan doen, en daarna hoe we het moeten doen.<\/p>\n<p><\/p>\n<h2 id=\"dlya-teh-komu-nadoelo-chitat\">Voor degenen die het lezen beu zijn<\/h2>\n<p><\/p>\n<p>In het kort, de link naar de scripts vindt u aan het einde van het artikel.<\/p>\n<p><\/p>\n<p>Maar het is niet mogelijk om het direct te installeren en te gebruiken. U moet eerst begrijpen hoe het script het juiste venster vindt. Zonder dit kan het script niet worden aangegeven waar de focus precies naartoe moet worden doorgegeven. En u moet begrijpen wat te doen als er ineens geen geschikt venster is gevonden.<\/p>\n<p><\/p>\n<p>En ik zal ook niet ingaan op hoe scripts worden ingesteld om te worden uitgevoerd met toetscombinaties. Bijvoorbeeld in KDE bevindt dit zich in Systeeminstellingen \u2192 Sneltoetsen \u2192 Aangepaste sneltoetsen. Andere venstermanagers zouden ook iets dergelijks moeten hebben.<\/p>\n<p><\/p>\n<h2 id=\"znakomstvo-s-wmctrl\">Kennismaking met wmctrl<\/h2>\n<p><\/p>\n<p><em>Wmctrl<\/em> is een consoletool voor interactie met de X Window Manager. Dit is het belangrijkste programma voor het script. Laten we snel bekijken hoe we het kunnen gebruiken.<\/p>\n<p><\/p>\n<p>Laten we eerst de lijst met geopende vensters weergeven:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -lx\n0x01e0000e -1 plasmashell.plasmashell             N\/A Desktop \u2014 Plasma\n0x01e0001e -1 plasmashell.plasmashell             N\/A Plasma\n0x03a00001  0 skype.Skype                         N\/A Skype\n0x04400003  0 Navigator.Firefox                   N\/A Google Translate - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A Top Publikaties van de Dag \/ Habr - Mozilla Firefox (Private Browsing)\n...<\/code><\/pre>\n<p><\/p>\n<p>Optie <em>-l<\/em> geeft een lijst weer van alle geopende vensters, en <em>-x<\/em> voegt de klassennaam aan de uitvoer toe (<em>skype.Skype<\/em>, <em>Navigator.Firefox<\/em> enzovoorts). We hebben hier de venster-id (kolom 1), de klassennaam (kolom 3) en de naam van het venster (de laatste kolom) nodig.<\/p>\n<p><\/p>\n<p>U kunt proberen een venster te activeren met de optie <em>-a<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -a skype.Skype -x<\/code><\/pre>\n<p><\/p>\n<p>Als alles volgens plan is verlopen, zou het Skype-venster op het scherm moeten verschijnen. Als in plaats daarvan de optie <em>-x<\/em> de optie moet worden gebruikt <em>-i<\/em>, in plaats van de klassenaam kan de id van het venster worden opgegeven. Het probleem met het id is dat het venster-id bij elke start van de applicatie verandert en we het van tevoren niet weten. Aan de andere kant geeft dit attribuut duidelijk aan welk venster we bedoelen, wat belangrijk kan zijn wanneer de applicatie meerdere vensters opent. Hierover later meer.<\/p>\n<p><\/p>\n<p>In deze fase moeten we onthouden dat we het juiste venster zullen zoeken met behulp van regex over de output. <em>wmctrl -lx<\/em>. Maar dat betekent niet dat we per se iets ingewikkelds moeten gebruiken. Gewoonlijk is de klassenaam of de titel van het venster voldoende. <\/p>\n<p><\/p>\n<p>In principe zou het basisidee al duidelijk moeten zijn. In de instellingen voor globale sneltoetsen\/sneltoetsen voor je window manager stellen we de gewenste combinatie in om het script uit te voeren.<\/p>\n<p><\/p>\n<h2 id=\"kak-polzovatsya-skriptami\">Hoe scripts te gebruiken<\/h2>\n<p><\/p>\n<p>Eerst moeten we de console-hulpprogramma's installeren. <em>wmctrl<\/em> en <em>xdotool<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo apt-get install wmctrl xdotool<\/code><\/pre>\n<p><\/p>\n<p>Vervolgens moeten we de scripts downloaden en deze toevoegen aan <em>$PATH<\/em>. Ik plaats ze meestal in <em>~ \/bin<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd ~ \/bin\n$ git clone https:\/\/github.com\/masyamandev\/Showwin-script.git\n$ ln -s .\/Showwin-script\/showwin showwin\n$ ln -s .\/Showwin-script\/showwinDetach showwinDetach<\/code><\/pre>\n<p><\/p>\n<p>Als de map <em>~ \/bin<\/em> niet bestond, moet deze worden aangemaakt en moet je opnieuw opstarten (of opnieuw inloggen), anders <em>~ \/bin<\/em> komt deze niet in <em>$PATH<\/em>. Als alles goed is gedaan, zouden de scripts beschikbaar moeten zijn vanuit de console en zou tab-completing moeten werken.<\/p>\n<p><\/p>\n<p>Het hoofdscript <strong>showwin<\/strong> neemt 2 parameters: de eerste is de regex waarmee we het juiste venster gaan zoeken, en de tweede parameter is het commando dat moet worden uitgevoerd als het benodigde venster niet is gevonden. <\/p>\n<p><\/p>\n<p>Je kunt proberen om het script uit te voeren, bijvoorbeeld:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ showwin \"Mozilla Firefox$\" firefox<\/code><\/pre>\n<p><\/p>\n<p>Als Firefox is ge\u00efnstalleerd, zou de focus naar het venster moeten worden gestuurd. Zelfs als Firefox niet was gestart, zou het nu moeten starten.<\/p>\n<p><\/p>\n<p>Als het gelukt is, kun je proberen om commando's in te stellen op combinaties. In de instellingen voor globale sneltoetsen\/sneltoetsen voegen we toe:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: showwin &#171;Mozilla Firefox$&#187; firefox<\/li>\n<li>Alt+D: showwin &#171;Mozilla Firefox (Priv\u00e9modus)$&#187; &#171;firefox -private-window&#187;<\/li>\n<li>Alt+C: showwin &#171;chromium-browser.Chromium-browser N*&#187; chromium-browser<\/li>\n<li>Alt+X: showwin &#171;chromium-browser.Chromium-browser I*&#187; &#171;chromium-browser -incognito&#187;<\/li>\n<li>Alt+S: showwin &#171;skype.Skype&#187; skypeforlinux<\/li>\n<li>Alt+E: showwin &#171;jetbrains-idea&#187; idea.sh<\/li>\n<\/ul>\n<p><\/p>\n<p>Enzovoort. Iedereen kan de sneltoetscombinaties en software naar eigen wens instellen.<br \/>\nAls alles goed is gegaan, kunnen we met bovengenoemde combinaties eenvoudig tussen vensters schakelen door de toetsen in te drukken.<\/p>\n<p><\/p>\n<p>Ik teleurstel de liefhebbers van Chrome: een normaal venster kan hij niet onderscheiden van het incognitovenster op basis van de output. <em>wmctrl<\/em> Het is niet mogelijk, omdat hun klassenamen en venstertitels hetzelfde zijn. In de voorgestelde regex zijn de symbolen N* en I* alleen nodig zodat deze regulaires van elkaar te onderscheiden zijn en verschillende vensters als hoofden kunnen worden aangesteld.<\/p>\n<p><\/p>\n<p>Voor het resetten van het hoofdvenster van de vorige combinatie (in feite voor de regex die <strong>showwin<\/strong> het laatst werd opgeroepen) moet het script worden aangeroepen <strong>showwinDetach<\/strong>. Ik heb dit script toegewezen aan een sneltoetscombinatie <em>Alt+Backspace<\/em>. <\/p>\n<p><\/p>\n<p>Het script <strong>showwin<\/strong> heeft nog een andere functie. Wanneer het met \u00e9\u00e9n parameter wordt aangeroepen (in dit geval is de parameter gewoon een identificator), controleert het helemaal geen regex, maar beschouwt het alle vensters als geschikt. Op zich lijkt dit nutteloos, maar zo kunnen we elk venster als hoofd aanstellen en snel naar dat venster overschakelen.<\/p>\n<p><\/p>\n<p>Ik heb de volgende combinaties ingesteld:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+1: showwin &#171;CustomKey1&#187;<\/li>\n<li>Alt+2: showwin &#171;CustomKey2&#187;<\/li>\n<li>\u2026<\/li>\n<li>Alt+0: showwin &#171;CustomKey0&#187;<\/li>\n<li>Alt+Backspace: showwinDetach<\/li>\n<\/ul>\n<p><\/p>\n<p>Zo kan ik elk venster aan een combinatie koppelen <em>Alt+1<\/em>\u2026<em>Alt+0<\/em>. Gewoon door <em>Alt+1<\/em> druk ik het huidige venster aan deze combinatie. Ik kan de koppeling ongedaan maken door te drukken op <em>Alt+1<\/em>, en vervolgens <em>Alt+Backspace<\/em>. Of het venster sluiten, dat werkt ook.<\/p>\n<p><\/p>\n<p>Daarna vertel ik een beetje technische details. Je kunt ze overslaan en gewoon proberen het in te stellen en te bekijken. Maar ik zou toch aanraden om te begrijpen wat anderen hebben geschreven voordat je het op je computer draait :).<\/p>\n<p><\/p>\n<h2 id=\"kak-razlichat-raznye-okna-odnogo-prilozheniya\">Hoe verschillende vensters van dezelfde applicatie te onderscheiden<\/h2>\n<p><\/p>\n<p>In feite was het eerste voorbeeld \u00abwmctrl -a skype.Skype -x\u00bb werkend en kan het worden gebruikt. Maar laten we nogmaals kijken naar het voorbeeld met Firefox, waarin 2 vensters zijn geopend:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">0x04400003  0 Navigator.Firefox                   N\/A Google Translate - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A De beste publicaties van de dag \/ Habr - Mozilla Firefox (Priv\u00e9 Browsen)<\/code><\/pre>\n<p><\/p>\n<p>Het eerste venster is de normale modus, het tweede is Priv\u00e9 Browsen. Deze vensters willen we beschouwen als verschillende applicaties en ernaar schakelen met verschillende sneltoetsen. <\/p>\n<p><\/p>\n<p>We moeten het script dat de vensters schakelt ingewikkelder maken. Ik heb de volgende oplossing gebruikt: een lijst van alle vensters weergeven, maken <em>grep<\/em> op basis van regex, de eerste regel nemen met behulp van <em>head<\/em>, de eerste kolom extraheren (dit wordt het venster-id) met behulp van <em>cut<\/em>, overschakelen naar het venster op basis van het id.<\/p>\n<p><\/p>\n<p>Hier zou een grap moeten zijn over reguliere expressies en twee problemen, maar in feite gebruik ik niets ingewikkelds. Regex heb ik nodig om het einde van de regel aan te geven (het teken \u00ab$\u00bb) en \u00abMozilla Firefox$\u00bb te onderscheiden van \u00abMozilla Firefox (Priv\u00e9 Browsen)$\u00bb.<\/p>\n<p><\/p>\n<p>The team looks something like this:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -i -a `wmctrl -lx | grep -i \"Mozilla Firefox$\" | head -1 | cut -d\" \" -f1`<\/code><\/pre>\n<p><\/p>\n<p>Hier kunnen we al raden dat er een tweede eigenschap van het script is: als grep niets heeft opgeleverd, betekent dit dat de gewenste applicatie niet geopend is en deze moet worden gestart met de opdracht uit de tweede parameter. Vervolgens moeten we periodiek controleren of het benodigde venster is geopend, zodat we de focus eraan kunnen geven. Ik ga hier niet te lang bij stilstaan; wie het nodig heeft, kan de broncode bekijken.<\/p>\n<p><\/p>\n<h2 id=\"kogda-okna-prilozheniya-ne-razlichimy\">Wanneer de vensters van de applicatie niet van elkaar te onderscheiden zijn<\/h2>\n<p><\/p>\n<p>Dus, we hebben geleerd de focus naar het gewenste applicatievenster te verschuiven. Maar wat als er meer dan \u00e9\u00e9n venster van de applicatie geopend is? Naar welk venster geven we dan de focus? Het bovenstaande script zal waarschijnlijk de focus naar het eerste geopende venster sturen. Echter, we zouden meer flexibiliteit willen. We willen de mogelijkheid hebben om precies dat venster te onthouden dat we nodig hebben en precies naar dat venster over te schakelen.<\/p>\n<p><\/p>\n<p>Het idee was als volgt: als we een specifiek venster willen onthouden voor een toetsenbordcombinatie, moeten we deze combinatie indrukken wanneer het juiste venster gefocust is. Vervolgens zal bij het indrukken van deze combinatie de focus naar dat venster gaan. Zolang het venster niet wordt gesloten of we deze combinatie van het script niet resetten. <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<p>Het algoritme van het script <strong>showwin<\/strong> is ongeveer als volgt:<\/p>\n<p><\/p>\n<ul>\n<li>Controleren of we eerder het id van het venster hebben onthouden waaraan we de focus moeten geven.<br \/>\nAls we het zijn onthouden en dat venster bestaat nog steeds, geven we de focus eraan en gaan we eruit. <\/li>\n<li>We kijken welk venster nu gefocust is, en als het voldoet aan onze voorwaarden, onthouden we het id voor later en gaan we eruit.<\/li>\n<li>We schakelen over naar een passend venster als het bestaat, of openen de benodigde applicatie.<\/li>\n<\/ul>\n<p><\/p>\n<p>Je kunt het huidige gefocuste venster achterhalen met de consoletool xdotool, door de uitvoer om te zetten in een hexadecimaal formaat:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ printf \"0xx\" `xdotool getwindowfocus`<\/code><\/pre>\n<p><\/p>\n<p>Iets onthouden in bash is het gemakkelijkst door bestanden te maken in een virtueel bestandssysteem dat in het geheugen staat. In Ubuntu is dit standaard aangesloten op <em>\/dev\/shm\/<\/em>. Ik kan niets zeggen over andere distributies, hopelijk is er ook zoiets. Je kunt het controleren met de opdracht:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ mount -l | grep tmpfs<\/code><\/pre>\n<p><\/p>\n<p>Het script zal lege mappen in deze map cre\u00ebren, zoals deze: <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX\/$WINDOW_ID<\/em>. Daarnaast zal het bij elke uitvoering een symlink aanmaken <em>\/dev\/shm\/$USER\/showwin\/showwin_last<\/em> en een werkende opdracht krijgen. <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX<\/em>. Dit is nodig om, indien nodig, het id van het venster voor een bepaalde combinatie met behulp van het script te verwijderen. <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<h2 id=\"chto-mozhno-uluchshit\">Wat kan verbeterd worden<\/h2>\n<p><\/p>\n<p>Ten eerste moeten scripts handmatig worden ingesteld. Waarschijnlijk zullen velen van jullie het systeem niet eens proberen in te stellen, vanwege de noodzaak om veel zelf te doen. Als er een mogelijkheid zou zijn om eenvoudig een pakket te installeren en alles gemakkelijker in te stellen, dan zou het misschien enige populariteit verwerven. En wie weet, misschien zou het dan zelfs in de standaard distributies worden opgenomen.<\/p>\n<p><\/p>\n<p>En misschien kan het eenvoudiger. Als je aan de hand van het id van het venster de id van het proces dat het heeft aangemaakt kunt achterhalen, en met de id van het proces een te weten komen welke commando het heeft aangemaakt, dan zou je de configuratie kunnen automatiseren. Eigenlijk heb ik daar niet naar gekeken, of het mogelijk is wat ik in deze alinea heb geschreven. Het is gewoon zo dat ik persoonlijk tevreden ben met hoe het nu werkt. Maar als iemand anders het handig vindt en het verbetert, dan gebruik ik graag de beste oplossing.<\/p>\n<p><\/p>\n<p>Een ander probleem, zoals ik al zei, is dat in sommige gevallen vensters niet van elkaar te onderscheiden zijn. Tot nu toe heb ik dit alleen gezien met incognito in chrome\/chromium, maar mogelijk is het ook ergens anders zo. In het ergste geval zijn er altijd universele combinaties. <em>Alt+1<\/em>\u2026<em>Alt+0<\/em>. Nogmaals, ik gebruik Firefox en voor mij persoonlijk is dit probleem niet significant.<\/p>\n<p><\/p>\n<p>Maar een probleem dat voor mij aanzienlijk is, is dat ik op mijn werk Mac OS gebruik en daar niets vergelijkbaars heb kunnen instellen. De tool <em>wmctrl<\/em> lijkt te zijn te installeren, maar werkt op Mac OS niet goed. Je kunt iets doen met de applicatie <em>Automator<\/em>, maar het is zo traag dat het zelfs als het werkt niet prettig is om ermee te werken. Ik heb ook geen combinatie van toetsen kunnen instellen die in alle programma's werken. Als iemand toevallig een oplossing bedenkt \u2014 ik zou er blij mee zijn.<\/p>\n<p><\/p>\n<h2 id=\"vmesto-zaklyucheniya\">Ter afsluiting<\/h2>\n<p><\/p>\n<p>Het zijn onverwacht veel woorden geworden voor zo'n schijnbaar eenvoudige functionaliteit. Ik wilde het idee overbrengen zonder de tekst te overladen, maar ik weet nog niet hoe ik het eenvoudiger kan vertellen. Misschien zou het beter zijn in videoformaat, maar dat is hier niet zo geliefd.<\/p>\n<p><\/p>\n<p>Ik heb een beetje verteld over wat er onder de motorkap van het script zit en hoe je het kunt instellen. Ik ben niet in detail gegaan over het script zelf, maar het zijn slechts 50 regels, het is niet moeilijk om het te begrijpen. <\/p>\n<p><\/p>\n<p>Ik hoop dat iemand anders dit idee ook uitprobeert en het misschien zelfs waardeert. Voor mezelf kan ik zeggen dat het script ongeveer 3 jaar geleden is geschreven en dat dit me HEEL handig is. Zo handig dat het ernstige ongemakken met zich meebrengt bij het werken op andere computers. En met mijn werk MacBook. <\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/masyamandev\/Showwin-script\">Link naar scripts<\/a><\/noindex><\/p>\n<p>Bron: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483846\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042f \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 Caps Lock \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c 2 \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u0443. \u042f \u0431\u044b \u0434\u0430\u0436\u0435 \u0445\u043e\u0442\u0435\u043b 2 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438: \u043e\u0434\u043d\u0443 \u0431\u044b \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0439 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438, \u0430 \u0432\u0442\u043e\u0440\u0443\u044e \u0434\u043b\u044f \u0440\u0443\u0441\u0441\u043a\u043e\u0439. \u041d\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430 \u2014 \u044d\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u0430\u044f, \u0447\u0442\u043e \u0432\u044b\u043f\u0438\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55206","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042f \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 Caps Lock \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c 2 \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u0443.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043a\u043d\u0430\u043c\u0438 \u0432 Linux | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042f \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 Caps Lock \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c 2 \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u0443.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-14T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Alternatief vensterbeheer in Linux | ProHoster","description":"Ik ben iemand die de Caps Lock gebruikt om de indeling te schakelen omdat ik te lui ben om 2 toetsen in te drukken als ik er \u00e9\u00e9n kan gebruiken.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043a\u043d\u0430\u043c\u0438 \u0432 Linux | ProHoster","og:description":"\u042f \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 Caps Lock \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c 2 \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u0443.","og:url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-14T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55206","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:48:29","updated":"2022-09-30 14:18:59","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/55206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=55206"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/55206\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=55206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=55206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=55206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}