פתרון הבעיה עם מעבר באמצעות alt+shift ב Linux, ביישומי אלקטרונים

שלום עמיתים!

אני רוצה לשתף את הפתרון שלי לבעיה המצוינת בכותרת. קיבלתי השראה לכתוב מאמר זה על ידי עמית brnovk, שלא התעצל והציע פתרון חלקי (בשבילי) לבעיה. הכנתי "קב" משלי שעזר לי. אני משתפת אתכם.

תיאור הבעיה

מְשׁוּמָשׁ Ubuntu אני משתמש בגרסה 18.04 לעבודה ולאחרונה שמתי לב שכאשר מחליפים את הפריסה באמצעות Alt+Shift ביישומים כמו Visual Studio Code, Skype, Slack ואחרים שנבנו עם Electron, מתרחשת הבעיה הבאה: המיקוד עובר משדה הקלט לחלונית החלון העליונה (תפריט). מסיבות אחרות, עברתי לפדורה + KDE והבנתי שהבעיה נמשכת. בזמן שחיפשתי פתרון, מצאתי את המאמר המצוין הזה. כיצד לתקן את סקייפ בעצמך. תודה רבה חבר brnovk, שדיבר בפירוט על הבעיה ושיתף את שיטתו לפתור אותה. אבל השיטה המצוינת במאמר פתרה את הבעיה עם יישום אחד בלבד, כלומר סקייפ. עבורי, זה היה קריטי גם להבין Visual Studio Code, כי כתיבת הודעות עם תפריט קופץ, למרות שזה מעצבן, זה לא כל כך אם אתה מעורב בפיתוח. בנוסף, עמית הציע פתרון שבו תפריט האפליקציה נעלם לחלוטין, ואני לא באמת רוצה לאבד את התפריט ב- VS Code.

ניסה להבין מה לא בסדר

אז, החלטתי לקחת את הזמן כדי להבין מה קורה. עכשיו אני אתאר בקצרה את הדרך שעברתי, אולי מישהו בקיא יותר בעניין הזה יעזור להסביר את הקשיים שנתקלתי בהם.

פתחתי את Visual Studio Code והתחלתי להקיש על שילובים שונים של Alt+<%something%> כדי לראות איך היישום הגיב. כמעט בכל המקרים, כל השילובים מלבד Alt+Shift פעלו מבלי לאבד את המיקוד. זה נראה כאילו מישהו אוכל את Shift לחוץ, שבא לאחר לחיצה על Alt, והאפליקציה חשבה שלחצתי על Alt, ואז לא לחצתי על שום דבר, שיחררה את Alt וזה השליך בשמחה את הפוקוס שלי לתפריט שלה, מה שנראה די הגיוני זה.

פתחתי את ההגדרות להחלפת פריסות מקלדת (אתם יודעים, הרשימה הארוכה הזו עם תיבות סימון וכל מיני הגדרות למקשים) והגדרתי לה להחליף פריסות באמצעות כפתור Alt, ללא לחיצות נוספות.

פתרון הבעיה עם מעבר באמצעות alt+shift ב Linux, ביישומי אלקטרונים

לאחר מכן, Alt+Tab כדי להחליף חלונות הפסיקו לעבוד. רק Tab עבד, כלומר מישהו "אכל" שוב את ה-Alt שלי. לא נותרו שאלות לגבי מי זה ה"מישהו" הזה, אבל לא היה לי מושג מה אפשר לעשות איתו.

אבל מכיוון שהבעיה הייתה צריכה להיפתר איכשהו, אז עלה במוחי פתרון:

  1. בהגדרות, השבת את המקש החם עבור החלפת פריסות מקלדת (בטל את הסימון של כל תיבות הסימון בקטע מעבר לפריסה אחרת);
  2. צור מקש קיצור משלך שיחליף עבורי את הפריסה

תיאור הפתרון

ראשית, בואו נתקין תוכנה המאפשרת לכם להקצות פקודות למקשי Xbindkeys. לצערי, כלים סטנדרטיים לא אפשרו לי ליצור מקש קיצור לשילוב כמו Alt+Shift דרך ממשק יפה. ניתן לעשות עבור Alt+S, Alt+1, Alt+shift+Y וכו'. וכו', אבל זה לא מתאים למשימה שלנו.

sudo dnf install xbindkeysrc

פרטים נוספים על זה זמינים ב ArchWiki
לאחר מכן, ניצור קובץ הגדרות לדוגמה עבור התוכנית. הדוגמה קצרה למדי, עם כמה פקודות, בדיוק מה שאתה צריך כדי להבין איך לעבוד איתה:

xbindkeys -d > ~/.xbindkeysrc

כפי שניתן לראות מהדוגמה בקובץ, עלינו לציין את המקש החם בו אנו רוצים להשתמש ואת הפקודה שיש לבצע. נראה פשוט.


# Examples of commands:
"xbindkeys_show"
  control+shift + q
# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

כמקש קיצור, אתה יכול להשתמש בכתיבה הניתנת לקריאה או להשתמש בקודי מפתח. זה עבד לי רק עם קודים, אבל אף אחד לא אוסר עליך להתנסות קצת.

כדי לקבל את הקודים עליך להשתמש בפקודה:

xbindkeys -k

חלון "X" קטן ייפתח. אתה רק צריך ללחוץ על מקשים כאשר הפוקוס נמצא בחלון זה! רק במקרה זה תראה משהו כזה בטרמינל:


[podkmax@localhost ~]$ xbindkeys -k
Press combination of keys or/and click under the window.
You can use one of the two lines after "NoCommand"
in $HOME/.xbindkeysrc to bind a key.
"(Scheme function)"
    m:0x4 + c:39
    Control + s

במקרה שלי, שילוב המקשים Alt+Shift נראה כך:

m:0x8 + c:50

כעת עלינו לוודא שכאשר אתה לוחץ על השילוב הזה, הפריסה משתנה. מצאתי רק פקודת עבודה אחת כדי לציין את הפריסה:


setxkbmap ru
setxkbmap us

כפי שאתה יכול לראות מהדוגמה, זה יכול לאפשר רק פריסה כזו או אחרת, אז שום דבר לא עלה לי בראש מלבד כתיבת תסריט.


vim ~/layout.sh
#!/bin/bash
LAYOUT=$(setxkbmap -print | awk -F + '/xkb_symbols/ {print $2}')
if [ "$LAYOUT" == "ru" ]
        then `/usr/bin/setxkbmap us`
        else `/usr/bin/setxkbmap ru`
fi

כעת, אם הקבצים .xbindkeysrc ו-layout.sh ממוקמים באותה ספרייה, התצוגה הסופית של קובץ .xbindkeysrc נראית כך:


# Examples of commands:

"xbindkeys_show"
  control+shift + q

# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

# specify a mouse button
"xterm"
  control + b:2
#А вот то, что добавил я
"./layout.sh"
  m:0x8 + c:50

לאחר מכן אנו מיישמים את השינויים:


xbindkeys -p

ואתה יכול לבדוק. אל תשכח לבטל את כל האפשרויות להחלפת פריסות בהגדרות הסטנדרטיות.

סך הכל

עמיתים, אני מקווה שהמאמר הזה יכול לעזור למישהו להיפטר במהירות מבעיה מעצבנת. באופן אישי, ביליתי את כל יום החופש שלי בניסיון להבין ולפתור את הבעיה איכשהו, כדי שלא יוסיח ממנה עוד במהלך שעות העבודה. כתבתי את המאמר הזה כדי לחסוך למישהו זמן ועצבים. רבים מכם משתמשים בשיטה חלופית של החלפת פריסות ואינם מבינים מה הבעיה. אני אישית אוהב להחליף עם Alt+Shift. וככה אני רוצה שזה יעבוד. אם אתה חולק את דעתי ואתה מתמודד עם בעיה זו, מאמר זה אמור לעזור לך.

מקור: www.habr.com

קנה אירוח אמין לאתרים עם הגנת DDoS, שרתי VPS VDS 🔥 קנה אחסון אתרים אמין עם הגנת DDoS, שרתי VPS VDS | ProHoster