{"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\/it\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","title":{"rendered":"Controllo alternativo delle finestre in Linux","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Sono uno di quelli che imposta il Caps Lock per cambiare la lingua, perch\u00e9 \u00e8 noioso premere due tasti quando se ne pu\u00f2 premere uno solo. Vorrei addirittura due tasti inutili: uno lo userei per attivare la lingua inglese e l'altro per la russa. Ma il secondo tasto inutile \u00e8 quello che apre il menu contestuale, cos\u00ec superfluo che molti produttori di laptop lo rimuovono. Quindi mi devo accontentare di ci\u00f2 che ho. <\/p>\n<p><\/p>\n<p>Inoltre, non voglio cercare le icone delle finestre nella barra delle applicazioni quando le cambio, cercando di cogliere i titoli mentre scorro tramite <em>Alt+Tab<\/em>, scorrere i desktop, ecc. Voglio premere una combinazione di tasti (idealmente solo uno, ma ormai non ci sono pi\u00f9 tasti inutili) e andare subito nella finestra desiderata. Ad esempio cos\u00ec:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: Firefox<\/li>\n<li>Alt+D: Firefox (Navigazione Privata)<\/li>\n<li>Alt+T: Terminale<\/li>\n<li>Alt+M: Calcolatrice<\/li>\n<li>Alt+E: IntelliJ Idea<\/li>\n<li>ecc.<\/li>\n<\/ul>\n<p><\/p>\n<p>Inoltre, quando premo, ad esempio, su <em>Alt+M<\/em> voglio vedere la calcolatrice indipendentemente dal fatto che quel programma sia aperto al momento. Se \u00e8 aperto, la finestra deve ricevere il focus, altrimenti deve avviarsi il programma necessario e ricevere il focus quando si carica.<\/p>\n<p><\/p>\n<p>Per le situazioni non coperte dallo scenario precedente, desidero avere delle combinazioni di tasti universali a cui posso facilmente assegnare qualsiasi delle finestre aperte. Ad esempio, ho assegnato 10 combinazioni da <em>Alt+1<\/em> fino a <em>Alt+0<\/em>, che non sono legate a nessun programma specifico. Posso semplicemente premere <em>Alt+1<\/em> e la finestra attualmente in focus ricever\u00e0 il focus quando premo <em>Alt+1<\/em>.<\/p>\n<p><\/p>\n<p>Di seguito troverai la descrizione di alcune altre funzionalit\u00e0 e la risposta su come poterlo fare. Ma ti avverto subito che una personalizzazione del genere pu\u00f2 creare una forte dipendenza e persino sintomi di astinenza quando \u00e8 necessario usare Windows, Mac OS o anche un computer con Linux di qualcun altro.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>In realt\u00e0, se ci pensiamo, non utilizziamo cos\u00ec tante applicazioni quotidianamente. Browser, terminale, IDE, un qualche messenger, file manager, calcolatrice e, probabilmente, \u00e8 praticamente tutto. Non servono molte combinazioni di tasti per coprire il 95% delle attivit\u00e0 quotidiane.<\/p>\n<p><\/p>\n<p>Per le applicazioni con pi\u00f9 finestre aperte, una di esse pu\u00f2 essere impostata come principale. Ad esempio, ho aperto diverse finestre di IntelliJ Idea, assegnate a <em>Alt+E<\/em>. In condizioni normali, quando si preme <em>Alt+E<\/em> si aprir\u00e0 una finestra di questo programma, probabilmente quella che \u00e8 stata aperta per prima. Tuttavia, se si preme <em>Alt+E<\/em> quando una delle finestre di questo programma \u00e8 gi\u00e0 in primo piano, quella finestra verr\u00e0 impostata come principale e ricever\u00e0 il focus durante le successive combinazioni di tasti. <\/p>\n<p><\/p>\n<p>\u00c8 possibile ripristinare la finestra principale. Per farlo, \u00e8 necessario prima resettare la combinazione e poi assegnare un'altra finestra come principale. Per resettare la combinazione, bisogna premere proprio la combinazione e poi una speciale combinazione di reset, che io ho impostato su <em>Alt+Backspace<\/em>. Questo attiver\u00e0 uno script che annuller\u00e0 l'assegnazione della finestra principale per la precedente combinazione. Successivamente, \u00e8 possibile assegnare una nuova finestra principale come descritto nel paragrafo precedente. Il ripristino della finestra associata alle combinazioni universali avviene in modo analogo.<\/p>\n<p><\/p>\n<p>L'introduzione \u00e8 stata lunga, ma volevo prima spiegare cosa faremo e poi come farlo.<\/p>\n<p><\/p>\n<h2 id=\"dlya-teh-komu-nadoelo-chitat\">Per coloro che si sono stufati di leggere<\/h2>\n<p><\/p>\n<p>In breve, il link agli script \u00e8 alla fine dell'articolo.<\/p>\n<p><\/p>\n<p>Tuttavia, non sar\u00e0 possibile installarlo e utilizzarlo immediatamente. Prima dovremo capire come lo script trova la finestra desiderata. Senza questo, non saremo in grado di indicare allo script dove deve mettere a fuoco. Dobbiamo anche capire cosa fare se non viene trovata una finestra adeguata.<\/p>\n<p><\/p>\n<p>Inoltre, non mi soffermer\u00f2 su come configurare l'esecuzione degli script tramite combinazioni di tasti. Ad esempio, in KDE si trova in Impostazioni di sistema \u2192 Scorciatoie \u2192 Scorciatoie personalizzate. Anche in altri gestori di finestre dovrebbe esserci questa opzione.<\/p>\n<p><\/p>\n<h2 id=\"znakomstvo-s-wmctrl\">Introduzione a wmctrl<\/h2>\n<p><\/p>\n<p><em>Wmctrl<\/em> \u00e8 un'utilit\u00e0 da riga di comando per interagire con il X Window Manager. \u00c8 il programma chiave per lo script. Diamo un'occhiata veloce a come usarlo.<\/p>\n<p><\/p>\n<p>Per iniziare, visualizziamo l'elenco delle finestre aperte:<\/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 Le migliori pubblicazioni della giornata \/ Habr - Mozilla Firefox (Navigazione in incognito)\n...<\/code><\/pre>\n<p><\/p>\n<p>Opzione <em>-l<\/em> mostra un elenco di tutte le finestre aperte, e <em>-x<\/em> aggiunge al output il nome della classe (<em>skype.Skype<\/em>, <em>Navigator.Firefox<\/em> E cos\u00ec via). Qui abbiamo bisogno dell'id della finestra (colonna 1), del nome della classe (colonna 3) e del titolo della finestra (ultima colonna).<\/p>\n<p><\/p>\n<p>Puoi provare ad attivare una finestra con l'opzione <em>-a<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -a skype.Skype -x<\/code><\/pre>\n<p><\/p>\n<p>Se tutto \u00e8 andato secondo i piani, dovrebbe apparire la finestra di Skype. Se invece dell'opzione <em>-x<\/em> utilizzare l'opzione <em>-i<\/em>, puoi specificare l'id della finestra invece del nome della classe. Il problema con l'id \u00e8 che cambia ad ogni avvio dell'applicazione e non possiamo conoscerlo in anticipo. D'altra parte, questo attributo indica in modo univoco la finestra, il che pu\u00f2 essere importante quando l'applicazione apre pi\u00f9 di una finestra. Ne parleremo tra poco.<\/p>\n<p><\/p>\n<p>A questo punto, dobbiamo ricordare che cercheremo la finestra desiderata usando regex dall'output <em>wmctrl -lx<\/em>. Ma questo non significa che dobbiamo necessariamente usare qualcosa di complesso. Di solito \u00e8 sufficiente il nome della classe o il titolo della finestra. <\/p>\n<p><\/p>\n<p>In linea di massima, l'idea principale dovrebbe essere chiara. Nelle impostazioni delle hotkey\/globali del tuo gestore di finestre, impostiamo la combinazione desiderata per eseguire lo script.<\/p>\n<p><\/p>\n<h2 id=\"kak-polzovatsya-skriptami\">Come utilizzare gli script<\/h2>\n<p><\/p>\n<p>Per prima cosa, \u00e8 necessario installare le utility da console <em>wmctrl<\/em> e <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>Dopo, \u00e8 necessario scaricare gli script e aggiungerli a <em>$PATH<\/em>. Di solito li metto 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>Se la directory <em>~\/bin<\/em> non esiste, allora deve essere creata e bisogna riavviare (o effettuare nuovamente il login), altrimenti <em>~\/bin<\/em> non sar\u00e0 presente in <em>$PATH<\/em>. Se tutto \u00e8 stato fatto correttamente, gli script dovrebbero essere accessibili dalla console e l'autocompletamento dovrebbe funzionare con Tab.<\/p>\n<p><\/p>\n<p>Lo script principale <strong>showwin<\/strong> accetta 2 parametri: il primo \u00e8 il regex, che useremo per cercare la finestra desiderata, e il secondo parametro \u00e8 il comando da eseguire se non si trova la finestra richiesta. <\/p>\n<p><\/p>\n<p>Puoi provare a eseguire lo script, ad esempio:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ showwin \"Mozilla Firefox$\" firefox<\/code><\/pre>\n<p><\/p>\n<p>Se Firefox \u00e8 installato, allora la finestra di Firefox dovrebbe ricevere il focus. Anche se Firefox non era gi\u00e0 aperto, dovrebbe avviarsi.<\/p>\n<p><\/p>\n<p>Se funziona, puoi provare a impostare l'esecuzione dei comandi su combinazioni di tasti. Nelle impostazioni dei tasti rapidi globali aggiungi:<\/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 (Navigazione Privata)$&#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>Eccetera. Ogni utente pu\u00f2 personalizzare le combinazioni di tasti e il software come preferisce.<br \/>\nSe tutto \u00e8 andato a buon fine, grazie alle combinazioni indicate sopra possiamo passare da una finestra all'altra semplicemente premendo i tasti.<\/p>\n<p><\/p>\n<p>Deluder\u00f2 i fan di Chrome: non \u00e8 possibile distinguere una finestra normale da una finestra in incognito per il loro output. <em>wmctrl<\/em> Non si pu\u00f2, perch\u00e9 hanno nomi di classi e titoli di finestra identici. Nei regex proposti, i caratteri N* e I* sono necessari solo per fare in modo che queste espressioni regolari si distinguano tra loro e possano essere assegnate come finestre principali diverse.<\/p>\n<p><\/p>\n<p>Per ripristinare la finestra principale della combinazione precedente (di fatto per il regex, che \u00e8 stato chiamato l'ultima volta), \u00e8 necessario eseguire lo script <strong>showwin<\/strong> showwinDetach. <strong>Ho assegnato questo script a una combinazione di tasti.<\/strong>Lo script <em>Alt+Backspace<\/em>. <\/p>\n<p><\/p>\n<p>ha un'altra funzione. Quando viene chiamato con un parametro (in questo caso il parametro \u00e8 semplicemente un identificatore), non verifica affatto il regex, ma considera tutti le finestre idonee. Di per s\u00e9 questo sembra inutile, tuttavia in questo modo possiamo impostare qualsiasi finestra come principale e passare rapidamente a quella finestra. <strong>showwin<\/strong> Ho impostato queste combinazioni:<\/p>\n<p><\/p>\n<p>Alt+1: showwin \u00abCustomKey1\u00bb<\/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: mostrarewinDetach<\/li>\n<\/ul>\n<p><\/p>\n<p>In questo modo posso associare qualsiasi finestra a combinazioni <em>Alt+1<\/em>&#8230;<em>Alt+0<\/em>. Basta premere <em>Alt+1<\/em> associo la finestra attuale a questa combinazione. Posso annullare l'associazione premendo <em>Alt+1<\/em>, e poi <em>Alt+Backspace<\/em>. Oppure chiudere la finestra, funziona anche cos\u00ec.<\/p>\n<p><\/p>\n<p>Ora dar\u00f2 qualche dettaglio tecnico. Non \u00e8 necessario leggerli, puoi semplicemente provare a configurare e vedere. Ma ti consiglio comunque di capire gli script altrui prima di eseguirli sul tuo computer :).<\/p>\n<p><\/p>\n<h2 id=\"kak-razlichat-raznye-okna-odnogo-prilozheniya\">Come distinguere diverse finestre di una stessa applicazione<\/h2>\n<p><\/p>\n<p>In linea di principio, il primo esempio \u00abwmctrl -a skype.Skype -x\u00bb funzionava ed \u00e8 utilizzabile. Ma diamo un'altra occhiata all'esempio con Firefox, in cui sono aperte 2 finestre:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">0x04400003  0 Navigator.Firefox                   N\/A Google Traduttore - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A Le migliori pubblicazioni di oggi \/ Habr - Mozilla Firefox (Navigazione privata)<\/code><\/pre>\n<p><\/p>\n<p>La prima finestra \u00e8 in modalit\u00e0 normale, la seconda \u00e8 in Navigazione privata. Queste finestre dovrebbero essere considerate applicazioni diverse e passare a esse con combinazioni di tasti diverse. <\/p>\n<p><\/p>\n<p>Dobbiamo complicare lo script che cambia le finestre. Ho utilizzato questa soluzione: visualizzare l'elenco di tutte le finestre, fare <em>grep<\/em> tramite regex, prendere la prima riga con <em>head<\/em>, ottenere la prima colonna (questo sar\u00e0 l'id della finestra) con <em>taglia<\/em>, passare alla finestra per id.<\/p>\n<p><\/p>\n<p>Qui dovrebbe esserci una battuta sui regex e due problemi, ma in realt\u00e0 non uso nulla di cos\u00ec complicato. Mi servono le regex per specificare la fine della stringa (il simbolo \u00ab$\u00bb) e distinguere \u00abMozilla Firefox$\u00bb da \u00abMozilla Firefox (Navigazione Privata)$\u00bb.<\/p>\n<p><\/p>\n<p>Il comando \u00e8 pi\u00f9 o meno cos\u00ec:<\/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>Qui si pu\u00f2 gi\u00e0 intuire la seconda caratteristica dello script: se grep non restituisce nulla, significa che l'applicazione desiderata non \u00e8 aperta e deve essere avviata eseguendo il comando dal secondo parametro. E poi controllare periodicamente se la finestra desiderata si \u00e8 aperta, per darle il focus. Non mi soffermer\u00f2 su questo, chi \u00e8 interessato pu\u00f2 guardare il codice sorgente.<\/p>\n<p><\/p>\n<h2 id=\"kogda-okna-prilozheniya-ne-razlichimy\">Quando le finestre dell'applicazione non sono distinguibili<\/h2>\n<p><\/p>\n<p>Quindi, abbiamo imparato a passare il focus alla finestra dell'applicazione desiderata. Ma cosa succede se ci sono pi\u00f9 finestre aperte dell'applicazione? A quale di esse passare il focus? Lo script sopra probabilmente passer\u00e0 al primo finestra aperta. Tuttavia, vorremmo maggiore flessibilit\u00e0. Vorremmo avere la possibilit\u00e0 di memorizzare quale finestra ci serve e passare esattamente a quella finestra.<\/p>\n<p><\/p>\n<p>L'idea era la seguente: se vogliamo memorizzare un certo finestra per una combinazione di tasti, dobbiamo premere quella combinazione quando la finestra desiderata \u00e8 in focus. In seguito, premendo quella combinazione, il focus verr\u00e0 dato a quella finestra specifica. Fino a quando la finestra non verr\u00e0 chiusa o non faremo un reset per quella combinazione di script. <strong>Ho assegnato questo script a una combinazione di tasti.<\/strong>.<\/p>\n<p><\/p>\n<p>L'algoritmo dello script <strong>showwin<\/strong> \u00e8 all'incirca il seguente:<\/p>\n<p><\/p>\n<ul>\n<li>Controllare se abbiamo gi\u00e0 memorizzato l'ID della finestra a cui dobbiamo passare il focus.<br \/>\nSe l'abbiamo memorizzato e quella finestra esiste ancora, allora passiamo il focus ad essa e usciamo. <\/li>\n<li>Controlliamo quale finestra \u00e8 attualmente in focus e, se soddisfa la nostra richiesta, memorizziamo il suo ID per passare successivamente a essa e usciamo.<\/li>\n<li>Passiamo a qualsiasi finestra appropriata se esiste o apriamo l'applicazione necessaria.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u00c8 possibile scoprire quale finestra \u00e8 attiva utilizzando l'utilit\u00e0 da console xdotool, convertendo la sua uscita in formato esadecimale:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ printf \"0x%08x\" `xdotool getwindowfocus`<\/code><\/pre>\n<p><\/p>\n<p>Ricordare qualcosa in bash \u00e8 pi\u00f9 semplice creando file in un file system virtuale che si trova in memoria. Su Ubuntu, questo \u00e8 gi\u00e0 montato di default in <em>\/dev\/shm\/<\/em>. Non posso dire nulla sugli altri distributori, spero che ci sia qualcosa di simile. Puoi controllare con il comando:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ mount -l | grep tmpfs<\/code><\/pre>\n<p><\/p>\n<p>Lo script creer\u00e0 directory vuote in questa cartella, di questo tipo: <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX\/$WINDOW_ID<\/em>. Inoltre, ad ogni chiamata, creer\u00e0 un symlink <em>\/dev\/shm\/$USER\/showwin\/showwin_last<\/em> con <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX<\/em>. Questo sar\u00e0 necessario per rimuovere l'ID della finestra per una determinata combinazione utilizzando lo script <strong>Ho assegnato questo script a una combinazione di tasti.<\/strong>.<\/p>\n<p><\/p>\n<h2 id=\"chto-mozhno-uluchshit\">Cosa pu\u00f2 essere migliorato<\/h2>\n<p><\/p>\n<p>In primo luogo, gli script devono essere configurati manualmente. Sicuramente, a causa della necessit\u00e0 di approfondire e fare molte operazioni manuali, molti di voi potrebbero anche non provare a configurare il sistema. Se ci fosse la possibilit\u00e0 di installare semplicemente un pacchetto e configurare tutto pi\u00f9 facilmente, potrebbe diventare pi\u00f9 popolare. E chiss\u00e0, potrebbe anche essere integrato nelle distribuzioni standard.<\/p>\n<p><\/p>\n<p>E, forse, si potrebbe semplificare. Se attraverso l'ID della finestra si pu\u00f2 risalire all'ID del processo che l'ha creata, e tramite l'ID del processo si pu\u00f2 scoprire quale comando lo ha generato, si potrebbe automatizzare la configurazione. In realt\u00e0, non mi sono addentrato se ci\u00f2 che ho scritto in questo paragrafo sia possibile. Il fatto \u00e8 che personalmente mi va bene come funziona attualmente. Ma se a qualcun altro oltre a me il metodo appare comodo e qualcuno decide di migliorarlo, sar\u00f2 felice di adottare la soluzione migliore.<\/p>\n<p><\/p>\n<p>Un altro problema, come ho gi\u00e0 scritto, \u00e8 che in alcuni casi non \u00e8 possibile distinguere le finestre l'una dall'altra. Finora ho notato questo solo con incognito in Chrome\/Chromium, ma potrebbe esserci qualcosa di simile anche altrove. In ogni caso, c'\u00e8 sempre la possibilit\u00e0 di combinazioni universali. <em>Alt+1<\/em>&#8230;<em>Alt+0<\/em>. Ancora una volta, uso Firefox e per me personalmente questo problema non \u00e8 significativo.<\/p>\n<p><\/p>\n<p>Un vero problema per me \u00e8 che per lavoro utilizzo Mac OS e l\u00ec non sono riuscito a configurare nulla di simile. L'utility <em>wmctrl<\/em> sembra che possa essere installata, ma non funziona correttamente su Mac OS. Qualcosa si pu\u00f2 fare con l'applicazione. <em>Automator<\/em>, ma \u00e8 cos\u00ec lento che non \u00e8 comodo usarlo anche quando funziona. Non sono riuscito nemmeno a configurare le combinazioni di tasti per farle funzionare in tutti i programmi. Se qualcuno dovesse trovare una soluzione, sarei felice di usarla.<\/p>\n<p><\/p>\n<h2 id=\"vmesto-zaklyucheniya\">In conclusion<\/h2>\n<p><\/p>\n<p>Sono state scritte inaspettatamente molte parole per una funzionalit\u00e0 che sembrava cos\u00ec semplice. Volevo esprimere l'idea senza sovraccaricare il testo, ma non ho ancora trovato un modo pi\u00f9 semplice per raccontarlo. Forse in formato video sarebbe meglio, ma qui non \u00e8 molto apprezzato.<\/p>\n<p><\/p>\n<p>Ho parlato un po' di cosa c'\u00e8 sotto il cofano dello script e come configurarlo. Non sono entrato nei dettagli dello script, ma sono solo 50 righe, non \u00e8 difficile capirlo. <\/p>\n<p><\/p>\n<p>Spero che qualcun altro provi questa idea e, forse, la apprezzi anche. Posso dire che lo script \u00e8 stato scritto circa 3 anni fa e mi \u00e8 molto comodo. Cos\u00ec comodo che provoca un serio disagio quando lavoro su computer di altre persone. E anche con il mio MacBook di lavoro. <\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/masyamandev\/Showwin-script\">Link agli script<\/a><\/noindex><\/p>\n<p>Fonte: <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 4.9.10 - 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. \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\" \/>\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\/it\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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\udd47Gestione alternativa delle finestre in Linux | ProHoster","description":"Sono uno di quelli che impostano Caps Lock per cambiare layout perch\u00e9 ho pigrizia a premere 2 tasti quando posso premere uno. Vorrei persino avere 2 tasti inutili: uno lo userei per attivare il layout inglese e l'altro per quello russo. Ma il secondo tasto inutile \u00e8 l'apertura del menu contestuale, talmente inutile che \u00e8 rimosso da molti produttori.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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. \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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/55206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=55206"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/55206\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=55206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=55206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=55206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}