Линукс дээрх цонхны өөр менежмент

Би нэг товчлуур дээр дарахад 2 товчлуур дарахаас залхуурдаг болохоор Caps Lock-ийг байршил солих гэж тохируулсан хүмүүсийн нэг. Би бүр шаардлагагүй 2 түлхүүр авахыг хүсч байна: би нэгийг нь англи хэл дээр, хоёр дахь нь орос хэл дээр ашиглах болно. Гэхдээ хоёр дахь шаардлагагүй түлхүүр бол контекст цэсийг дуудах явдал бөгөөд энэ нь маш шаардлагагүй тул олон зөөврийн компьютер үйлдвэрлэгчид үүнийг хасдаг. Тиймээс байгаа зүйлдээ сэтгэл хангалуун байх хэрэгтэй.

Мөн би цонх солихдоо taskbar дээрх дүрсүүдийг хайхыг хүсэхгүй байна, эсвэл гүйлгэж байхдаа нэрийг нь олж харахыг хүсэхгүй байна. Alt + Tab, ширээний компьютеруудыг гүйлгэх гэх мэт. Би товчлуурын хослолыг дарахыг хүсч байна (зөвхөн ганцхан, гэхдээ үнэгүй шаардлагагүй товчлуур байхгүй болсон) нэн даруй хэрэгтэй цонх руугаа очно. Жишээ нь:

  • Alt+F: Firefox
  • Alt+D: Firefox (Хувийн хөтөч)
  • Alt+T: Терминал
  • Alt+M: Тооцоологч
  • Alt+E: IntelliJ санаа
  • гэх мэт.

Түүнээс гадна, жишээ нь, дээр дарж Alt+M Энэ програм ажиллаж байгаа эсэхээс үл хамааран би тооны машиныг харахыг хүсч байна. Хэрэв энэ нь ажиллаж байгаа бол түүний цонхонд анхаарлаа төвлөрүүлэх шаардлагатай бөгөөд хэрэв үгүй ​​бол хүссэн програмаа ажиллуулж, ачаалах үед фокусыг шилжүүлээрэй.

Өмнөх скриптэд хамрагдаагүй тохиолдлуудын хувьд би нээлттэй цонхнуудын аль нэгэнд хялбархан хуваарилагдах боломжтой бүх нийтийн товчлуурын хослолтой байхыг хүсч байна. Жишээлбэл, би 10 хослолыг оноосон Alt + 1 нь Alt + 0, ямар ч програмтай холбоогүй. Би зүгээр л дарж чадна Alt + 1 бөгөөд одоогоор анхаарлаа төвлөрүүлж байгаа цонхыг дарахад анхаарлаа төвлөрүүлэх болно Alt + 1.

Зүсэлтийн доор хэд хэдэн онцлог шинж чанаруудын тайлбар, үүнийг хэрхэн хийх талаар хариулт байна. Гэхдээ "өөртөө зориулж" ийм тохируулга нь Windows, Mac OS эсвэл өөр хэн нэгний компьютерийг Линукс ашиглах шаардлагатай бол ноцтой донтолт үүсгэж, бүр татгалзахад хүргэж болзошгүйг би даруй анхааруулъя.

Ер нь бодоод үзэх юм бол бид ийм олон программыг өдөр тутам хэрэглэдэггүй. Хөтөч, терминал, IDE, зарим төрлийн мессенжер, файлын менежер, тооны машин, магадгүй энэ нь бараг бүх зүйл юм. Өдөр тутмын ажлын 95% -ийг хангахын тулд олон түлхүүрийн хослол хэрэггүй.

Нээлттэй хэд хэдэн цонхтой програмуудын хувьд тэдгээрийн аль нэгийг нь үндсэн гэж тодорхойлж болно. Жишээлбэл, танд олон IntelliJ Idea цонх нээгдэж, түүнд хуваарилагдсан байна Alt + E. Хэвийн нөхцөлд, дарах үед Alt + E Энэ програмын зарим цонх нээгдэх бөгөөд хамгийн түрүүнд нээгдсэн цонх нээгдэнэ. Гэсэн хэдий ч, хэрэв та дарвал Alt + E Хэрэв энэ програмын цонхны аль нэг нь аль хэдийн фокус дээр байгаа бол энэ цонхыг үндсэн цонхоор томилж, дараагийн хослолыг дарахад анхаарлаа төвлөрүүлэх болно.

Үндсэн цонхыг дахин хуваарилж болно. Үүнийг хийхийн тулд та эхлээд хослолыг дахин тохируулж, дараа нь өөр цонхыг үндсэн цонх болгон хуваарилах хэрэгтэй. Хослолыг дахин тохируулахын тулд та хослолыг өөрөө дарах хэрэгтэй бөгөөд дараа нь дахин тохируулах тусгай хослолыг би үүнийг зааж өгсөн. Alt+Backspace. Энэ нь өмнөх хослолын үндсэн цонхны хуваарилалтыг цуцлах скриптийг дуудах болно. Дараа нь та өмнөх догол мөрөнд дурдсанчлан шинэ үндсэн цонхыг оноож болно. Холбогдсон цонхыг бүх нийтийн хослолууд руу дахин тохируулах нь ижил аргаар явагддаг.

Танилцуулга урт байсан ч би эхлээд юу хийхээ хэлж, дараа нь яаж хийхийг тайлбарлахыг хүссэн.

Уншихаас залхсан хүмүүст зориулав

Товчхондоо, скриптүүдийн холбоос нь өгүүллийн төгсгөлд байна.

Гэхдээ та үүнийг шууд суулгаж, ашиглах боломжгүй хэвээр байх болно. Та эхлээд скрипт хүссэн цонхоо хэрхэн олохыг олж мэдэх хэрэгтэй. Үүнгүйгээр фокусыг яг хаана шилжүүлэх шаардлагатайг скриптэд хэлэх боломжгүй болно. Хэрэв гэнэт тохирох цонх олдохгүй бол юу хийхээ ойлгох хэрэгтэй.

Мөн би товчлуурын хослолыг дарж скриптүүдийн гүйцэтгэлийг хэрхэн тохируулах талаар анхаарлаа хандуулахгүй. Жишээлбэл, KDE-д энэ нь Системийн Тохиргоо → Товчлол → Тусгай товчлол хэсэгт байна. Бусад цонхны менежерүүдэд ч ийм байх ёстой.

wmctrl-ийг танилцуулж байна

Wmctrl — X Window Manager-тэй харилцах консолын хэрэгсэл. Энэ бол скриптийн гол програм юм. Үүнийг хэрхэн ашиглах талаар товчхон харцгаая.

Эхлээд нээлттэй цонхнуудын жагсаалтыг харуулъя:

$ wmctrl -lx
0x01e0000e -1 plasmashell.plasmashell             N/A Desktop — Plasma
0x01e0001e -1 plasmashell.plasmashell             N/A Plasma
0x03a00001  0 skype.Skype                         N/A Skype
0x04400003  0 Navigator.Firefox                   N/A Google Переводчик - Mozilla Firefox
0x04400218  0 Navigator.Firefox                   N/A Лучшие публикации за сутки / Хабр - Mozilla Firefox (Private Browsing)
...

Сонголт -l бүх нээлттэй цонхнуудын жагсаалтыг харуулах ба -NS гаралтад ангийн нэрийг нэмнэ (Skype.Skype, Navigator.Firefox гэх мэт). Энд бидэнд цонхны id (багана 1), ангийн нэр (3-р багана) болон цонхны нэр (сүүлийн багана) хэрэгтэй.

Та сонголтыг ашиглан зарим цонхыг идэвхжүүлэхийг оролдож болно -a:

$ wmctrl -a skype.Skype -x

Хэрэв бүх зүйл төлөвлөгөөний дагуу явагдсан бол Skype цонх дэлгэц дээр гарч ирэх ёстой. Хэрэв сонголтын оронд бол -x ашиглах сонголт -i, дараа нь ангийн нэрний оронд цонхны ID-г зааж өгч болно. ID-тай холбоотой асуудал нь програмыг эхлүүлэх бүрт цонхны id өөрчлөгддөг бөгөөд бид үүнийг урьдчилан мэдэх боломжгүй байдаг. Нөгөөтэйгүүр, энэ шинж чанар нь цонхыг өвөрмөц байдлаар тодорхойлдог бөгөөд энэ нь програм нэгээс олон цонх нээх үед чухал ач холбогдолтой байж болно. Энэ талаар бага зэрэг дэлгэрэнгүй.

Энэ үе шатанд бид хүссэн цонхоо гаралтаар regex ашиглан хайх болно гэдгийг санах хэрэгтэй wmctrl -lx. Гэхдээ энэ нь бид нарийн төвөгтэй зүйлийг ашиглах ёстой гэсэн үг биш юм. Ихэвчлэн ангийн нэр эсвэл цонхны нэр хангалттай байдаг.

Үндсэндээ гол санаа нь аль хэдийн тодорхой байх ёстой. Цонхны менежерийнхээ глобал товч/товчлолын тохиргоонд скриптийг ажиллуулахын тулд шаардлагатай хослолыг тохируулна уу.

Скриптүүдийг хэрхэн ашиглах талаар

Эхлээд та консолын хэрэгслүүдийг суулгах хэрэгтэй wmctrl и xdotool:

$ sudo apt-get install wmctrl xdotool

Дараа нь та скриптүүдийг татаж аваад нэмэх хэрэгтэй $ PATH. Би ихэвчлэн тэдгээрийг оруулдаг ~/bin:

$ cd ~/bin
$ git clone https://github.com/masyamandev/Showwin-script.git
$ ln -s ./Showwin-script/showwin showwin
$ ln -s ./Showwin-script/showwinDetach showwinDetach

Хэрэв лавлах ~/bin Хэрэв тэнд байхгүй байсан бол та үүнийг үүсгэж, дахин ачаалах (эсвэл дахин нэвтрэх) хэрэгтэй, эс тэгвээс ~/bin цохихгүй $ PATH. Хэрэв бүх зүйл зөв хийгдсэн бол скриптүүд консолоос хандах боломжтой байх ёстой бөгөөд Tab бөглөх нь ажиллах ёстой.

Үндсэн скрипт шоувин 2 параметрийг авдаг: эхнийх нь regex бөгөөд бид шаардлагатай цонхыг хайх болно, хоёр дахь параметр нь шаардлагатай цонх олдохгүй бол гүйцэтгэх шаардлагатай команд юм.

Та скрипт ажиллуулахыг оролдож болно, жишээ нь:

$ showwin "Mozilla Firefox$" firefox

Хэрэв Firefox суулгасан бол түүний цонхонд анхаарлаа хандуулах хэрэгтэй. Firefox ажиллахгүй байсан ч эхлэх ёстой байсан.

Хэрэв энэ нь ажиллаж байвал та хослолууд дээрх командуудын гүйцэтгэлийг тохируулахыг оролдож болно. Глобал халуун товч/товчлолын тохиргоонд дараахыг нэмнэ үү:

  • Alt+F: showwin "Mozilla Firefox$" firefox
  • Alt+D: showwin "Mozilla Firefox (Private Browsing)$" "firefox -хувийн цонх"
  • Alt+C: showwin "chromium-browser. Chromium-browser N*" chromium-хөтөч
  • Alt+X: showwin "chromium-browser. Chromium-browser I*" "chromium-browser -incognito"
  • Alt+S: showwin “skype.Skype” skypeforlinux
  • Alt+E: showwin “jetbrains-idea” санаа.sh

Гэх мэт. Хүн бүр өөрийн үзэмжээр товчлуурын хослол болон программ хангамжийг тохируулах боломжтой.
Хэрэв бүх зүйл зөв хийгдсэн бол дээрх хослолуудыг ашигласнаар бид зүгээр л товчлуур дээр дарж цонхны хооронд шилжих боломжтой болно.

Би хром сонирхогчдын урмыг хугалах болно: энэ нь ердийн цонхыг гаралтаар нь ялгах чадвартай wmctrl Та чадахгүй, тэд ижил ангийн нэр, цонхны гарчигтай. Санал болгож буй regex-д N* ба I* тэмдэгтүүд нь зөвхөн эдгээр тогтмол илэрхийллүүд бие биенээсээ ялгаатай байхын тулд шаардлагатай бөгөөд тэдгээрийг үндсэн цонх болгон томилж болно.

Өмнөх хослолын үндсэн цонхыг дахин тохируулахын тулд (үнэндээ regex-ийн хувьд шоувин сүүлчийн удаа дуудсан) та скрипт рүү залгах хэрэгтэй showwinDetach. Би энэ скриптийг товчлуурын хослолд хуваарилсан Alt+Backspace.

Скрипт дээр шоувин бас нэг функц байна. Энэ нь нэг параметрээр дуудагдах үед (энэ тохиолдолд параметр нь зөвхөн танигч) регексийг огт шалгадаггүй, харин бүх цонхыг тохиромжтой гэж үздэг. Энэ нь өөрөө ашиггүй мэт санагдаж болох ч ийм байдлаар бид ямар ч цонхыг үндсэн цонхоор тодорхойлж, тухайн цонх руу хурдан шилжих боломжтой.

Би дараах хослолуудыг тохируулсан:

  • Alt+1: "CustomKey1"-г харуулах
  • Alt+2: "CustomKey2"-г харуулах
  • ...
  • Alt+0: "CustomKey0"-г харуулах
  • Alt+Backspace: showwinDetach

Ингэснээр би ямар ч цонхыг хослолд холбож чадна Alt + 1...Alt + 0. Зүгээр л товшиж Alt + 1 Би одоогийн цонхыг энэ хослолтой холбодог. Би товшоод холболтыг цуцалж болно Alt + 1, Тэгээд Alt+Backspace. Эсвэл цонхоо хаа, энэ нь бас ажилладаг.

Дараа нь би танд техникийн зарим нарийн ширийн зүйлийг хэлэх болно. Та тэдгээрийг унших шаардлагагүй, гэхдээ зүгээр л тохируулаад үзэхийг хичээгээрэй. Гэхдээ би бусад хүмүүсийн скриптийг компьютер дээрээ ажиллуулахаасаа өмнө ойлгохыг зөвлөж байна :).

Нэг програмын өөр өөр цонхнуудыг хэрхэн ялгах вэ

Зарчмын хувьд хамгийн анхны жишээ "wmctrl -a skype.Skype -x" ажиллаж байсан бөгөөд ашиглах боломжтой. Гэхдээ 2 цонх нээлттэй Firefox-ийн жишээг дахин харцгаая.

0x04400003  0 Navigator.Firefox                   N/A Google Переводчик - Mozilla Firefox
0x04400218  0 Navigator.Firefox                   N/A Лучшие публикации за сутки / Хабр - Mozilla Firefox (Private Browsing)

Эхний цонх нь ердийн горим, хоёр дахь нь Хувийн хөтөч юм. Би эдгээр цонхыг өөр өөр програм гэж үзэж, өөр өөр товчлуурын хослолыг ашиглан тэдгээрт шилжихийг хүсч байна.

Цонхыг солих скриптийг төвөгтэй болгох шаардлагатай. Би энэ шийдлийг ашигласан: бүх цонхыг жагсааж, хий grep regex-ээр эхний мөрийг авна толгой, ашиглан эхний баганыг (энэ нь цонхны ID байх болно) авна тайрах, id-ээр цонх руу шилжинэ.

Тогтмол хэллэг, хоёр бодлогын тухай хошигнол байх ёстой, гэхдээ үнэндээ би ямар ч төвөгтэй зүйл хэрэглэдэггүй. Мөрийн төгсгөлийг ("$" тэмдэг) зааж, "Mozilla Firefox$"-ыг "Mozilla Firefox (Private Browsing)$"-ээс ялгахын тулд надад тогтмол хэллэг хэрэгтэй байна.

Тушаал нь иймэрхүү харагдаж байна:

$ wmctrl -i -a `wmctrl -lx | grep -i "Mozilla Firefox$" | head -1 | cut -d" " -f1`

Энд та скриптийн хоёрдахь шинж чанарыг аль хэдийн таамаглаж болно: хэрэв grep юу ч буцаагаагүй бол хүссэн програм нээгдээгүй байгаа тул та хоёр дахь параметрийн командыг ажиллуулж эхлэх хэрэгтэй. Дараа нь фокусыг шилжүүлэхийн тулд шаардлагатай цонх нээгдсэн эсэхийг үе үе шалгаж үзээрэй. Би үүнд анхаарлаа хандуулахгүй, хэнд хэрэгтэй байгаа бол эх сурвалжийг харах болно.

Хэрэглээний цонхыг ялгах боломжгүй үед

Тиймээс бид фокусыг хүссэн програмын цонх руу хэрхэн шилжүүлэх талаар сурсан. Гэхдээ програмын нэгээс олон цонх нээлттэй байвал яах вэ? Би алинд нь анхаарлаа хандуулах ёстой вэ? Дээрх скрипт нь эхний нээлттэй цонх руу шилжих магадлалтай. Гэсэн хэдий ч бид илүү уян хатан байдлыг хүсч байна. Бидэнд ямар цонх хэрэгтэйг санаж, тухайн цонх руу шилжихийг хүсч байна.

Энэ санаа нь: Хэрэв бид товчлуурын хослолын тодорхой цонхыг санахыг хүсч байвал хүссэн цонхондоо анхаарлаа төвлөрүүлэх үед энэ хослолыг дарах хэрэгтэй. Ирээдүйд та энэ хослолыг дарах үед энэ цонхонд анхаарлаа хандуулах болно. Цонх хаагдах эсвэл бид энэ скриптийн хослолыг дахин тохируулах хүртэл showwinDetach.

Скрипт алгоритм шоувин Энэ нь иймэрхүү зүйл:

  • Фокусыг шилжүүлэх цонхны ID-г бид өмнө нь санаж байсан эсэхийг шалгана уу.
    Хэрэв та санаж байгаа бөгөөд ийм цонх хэвээр байгаа бол бид анхаарлаа түүн рүү шилжүүлж, гарна.
  • Бид аль цонхонд анхаарлаа төвлөрүүлж байгааг хардаг бөгөөд хэрэв энэ нь бидний хүсэлттэй тохирч байвал ирээдүйд түүн рүү очиж, гарахын тулд түүний ID-г санаарай.
  • Хэрэв байгаа бол бид ядаж тохирох цонх руу очих эсвэл хүссэн програмаа нээнэ үү.

Xdotool консолын хэрэглүүрийг ашиглан аль цонхны гаралтыг XNUMX-тын формат руу хөрвүүлэх замаар одоогоор аль цонхонд анхаарлаа хандуулж байгааг олж мэдэх боломжтой.

$ printf "0x%08x" `xdotool getwindowfocus`

Bash дээр ямар нэг зүйлийг санах хамгийн хялбар арга бол санах ойд байрлах виртуал файлын системд файл үүсгэх явдал юм. Ubuntu дээр энэ нь анхдагчаар идэвхждэг /dev/shm/. Бусад түгээлтийн талаар би юу ч хэлж чадахгүй, үүнтэй төстэй зүйл байгаа гэж найдаж байна. Та дараах тушаалаар харж болно.

$ mount -l | grep tmpfs

Скрипт нь энэ хавтсанд дараах байдлаар хоосон сангуудыг үүсгэх болно: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Нэмж дурдахад энэ нь дуудагдах бүрт симбол үүсгэх болно /dev/shm/$USER/showwin/showwin_last тухай /dev/shm/$USER/showwin/$SEARCH_REGEX. Энэ нь шаардлагатай бол скрипт ашиглан тодорхой хослолын цонхны ID-г устгахад шаардлагатай болно showwinDetach.

Юуг сайжруулж болох вэ?

Нэгдүгээрт, скриптүүдийг гараар тохируулах ёстой. Мэдээжийн хэрэг, гараараа маш их зүйлийг судалж, хийх шаардлагатай байгаа тул та нарын ихэнх нь системийг тохируулах гэж оролдохгүй байх болно. Хэрэв багцыг зүгээр л суулгаж, бүх зүйлийг хялбархан тохируулах боломжтой байсан бол энэ нь зарим нэг алдартай болох байсан. Дараа нь хараарай, програм нь стандарт түгээлтүүд дээр гарах болно.

Тэгээд магадгүй үүнийг илүү хялбар хийж болно. Хэрэв та цонхны id-ээр үүнийг үүсгэсэн процессын id-г, мөн процессын id-ээр аль командыг үүсгэсэн болохыг олж мэдэх боломжтой бол тохиргоог автоматжуулах боломжтой болно. Үнэндээ би энэ догол мөрөнд бичсэн зүйл боломжтой эсэхийг ойлгосонгүй. Би хувьдаа энэ нь одоо ажиллаж байгаа арга барилд сэтгэл хангалуун байгаа нь баримт юм. Харин надаас өөр хэн нэгэн энэ аргыг бүхэлд нь тохиромжтой гэж үзэж, хэн нэгэн үүнийг сайжруулвал би илүү сайн шийдлийг ашиглахдаа баяртай байх болно.

Өөр нэг асуудал бол би аль хэдийн бичсэнчлэн зарим тохиолдолд цонхнууд нь бие биенээсээ ялгагдах боломжгүй байдаг. Одоогоор би үүнийг зөвхөн хром/хром дээр нууцлалтайгаар ажигласан, гэхдээ өөр газар үүнтэй төстэй зүйл байж магадгүй юм. Хамгийн сүүлчийн арга бол бүх нийтийн хослолуудын сонголт үргэлж байдаг Alt + 1...Alt + 0. Дахин хэлэхэд би Firefox ашигладаг бөгөөд миний хувьд энэ асуудал тийм ч чухал биш юм.

Гэхдээ миний хувьд хамгийн чухал асуудал бол би Mac OS-ийг ажилдаа ашигладаг бөгөөд тэнд тийм зүйл тохируулж чадаагүй явдал юм. хэрэгсэл wmctrl Би үүнийг суулгаж чадсан гэж бодож байна, гэхдээ энэ нь Mac OS дээр ажиллахгүй байна. Програмаар ямар нэг зүйл хийж болно Автоматжуулалт, гэхдээ энэ нь маш удаан тул ажиллаж байх үед ч ашиглахад тохиромжгүй байдаг. Би бас бүх программ дээр ажиллахын тулд товчлуурын хослолыг тохируулж чадаагүй. Хэрэв хэн нэгэн гэнэт ямар нэгэн шийдэл гаргаж ирвэл би үүнийг ашиглахдаа баяртай байх болно.

Оронд дүгнэлтийг

Энэ нь энгийн мэт санагдах функцэд зориулагдсан гэнэтийн олон тооны үг болж хувирав. Би санаагаа дамжуулж, текстийг хэт ачаалахгүй байхыг хүссэн ч яаж илүү энгийнээр хэлэхээ хараахан олж чадаагүй байна. Магадгүй энэ нь видео форматтай байх нь дээр байх, гэхдээ энэ нь хүмүүст таалагдахгүй байна.

Би скриптийн доор юу байгаа, түүнийг хэрхэн тохируулах талаар бага зэрэг ярьсан. Би скриптийн талаар дэлгэрэнгүй тайлбарлаагүй, гэхдээ энэ нь ердөө 50 мөр тул ойлгоход хэцүү биш юм.

Өөр хэн нэгэн энэ санааг туршиж үзэх, магадгүй үүнийг үнэлэх байх гэж найдаж байна. Зохиолыг 3 жилийн өмнө бичсэн бөгөөд энэ нь надад маш тохиромжтой гэж би өөрийнхөө тухай хэлж чадна. Энэ нь маш тохиромжтой тул бусад хүмүүсийн компьютертэй ажиллахад ноцтой таагүй байдал үүсгэдэг. Мөн ажиллаж байгаа MacBook-тэй.

Скриптүүдийн холбоос

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх