Каждое утро я должен открыть, изменить размер и переместить все приложения, которые мне нужно работать, поэтому я подумал: что если бы мне только пришлось нажать ярлык клавиатуры, который мог бы сделать для меня …
Чтобы это произошло, мне нужно будет написать сценарий, который будет выполнен с помощью этого ярлыка, этот скрипт придется делать три задания: открытые приложения, подождите, пока он начнут и измените размер и изменение изменения их.
Перед продолжением, это было разработано и проверено на POP! _OS 20.04 LTS , ubuntu на базе Linux дистрибутив. Исходный код – здесь Отказ Я мог бы просто использовать режим приостановки, но я использую двойную загрузку, так что это не всегда работает для меня, и исследуя другие инструменты, чтобы найти решение, это очень весело.
Этот скрипт был написан в Python 3.8, я назвал это Desktop-bootstrap.py , чтобы открыть приложения, которые я использовал Модуль подпроцесса Отказ И изменить размер и перемещение я использовал инструмент командной строки wmctrl Отказ Сценарий принимает аргументы, поэтому вы можете открыть одно приложение за раз, но он также поддерживает файл конфигурации для открытия набора приложений, я охвачу в этой статье последнего подхода.
В каждой строке файла конфигурации вы пишете приложение, которое вы хотите открыть, команда, чтобы открыть его, размер и положение, как это:
<Команда> <имя приложения>
Пример файла конфигурации будет:
insomnia insomnia 960 0 960 1080 google-chrome google 0 0 960 1080 https://dev.to/ricardo93borges https://github.com/ricardo93borges
Обратите внимание, что большинство браузеров принимают в качестве аргументов веб-сайты для открытия, когда он запускается, каждый веб-сайт открывается на другой вкладке, поэтому мы воспользуемся этим. Вы можете назвать файл конфигурации как Config-образец.txt
Отказ
Теперь нам нужен скрипт оболочки, который будет выполнен, когда мы используем ярлык клавиатуры, этот скрипт оболочки позвонит сценарию Python, проходящий в качестве аргумента местоположение файла конфигурации. Я тоже хочу открыть терминал, поэтому я также включал команду для этого в сценарии оболочки:
# desktop-bootstrap.sh #!/bin/sh gnome-terminal --geometry 170x25+1920+890 --working-directory=/home /usr/bin/python3.8 /path/to/desktop-bootstrap.py --file /path/to/config-sample.txt
Вот сценарий Python с комментариями для объяснения некоторых кусочков кода:
# desktop-bootstrap.py import subprocess import time import sys """ I limited the retries, so the script doesn't run forever waiting for an application to start """ max_retries = 20 """ This method get an application ID looking for its name in a list obtained by a wmctrl command, that ID is used in the resize command """ def get_id_by_name(applications_running, name): for app in applications_running: if app.lower().find(name) > -1: return app.split(' ')[0] """ This method receives a list of applications and for each one check if is running. If is running resize and reposition it, if not check again in the next iteration """ def resize(applications): retry = 0 while len(applications) > 0: # Get a list of running applications applications_running = subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8").split("\n") for index, app in enumerate(applications): application_id = get_id_by_name(applications_running, app['name']) if application_id: # Resize and reposition dimensions = "-e " f"0,{app['x']},{app['y']},{app['width']},{app['height']}" command = ["wmctrl", "-i", "-r", application_id, dimensions] subprocess.run(command) applications.pop(index) retry += 1 if retry > max_retries: break time.sleep(5) """ This method open the application and send it to resize() method to resize and reposition it accordingly to the arguments passed """ def handle_args(): command = [sys.argv[1]] """ If the application is a browser it may have more arguments (the websites to open when it starts) """ for i in range(len(sys.argv) - 7): command.append(sys.argv[7 + i]) output = subprocess.Popen(command) applications = [{ 'name': sys.argv[2], 'pid': output.pid, 'x': sys.argv[3], 'y': sys.argv[4], 'width': sys.argv[5], 'height': sys.argv[6] }] resize(applications) """ This method handles the configuration file, open the applications and send it to resize() method to resize and reposition it. """ def handle_file(file): applications = [] with open(file) as f: for index, line in enumerate(f): props = line.split(' ') command = [props[0]] """ If the application is a browser it may have more arguments (the websites to open when it starts) """ for i in range(len(props) - 6): command.append(props[6+i]) output = subprocess.Popen(command) applications.append({ 'name': props[1], 'pid': output.pid, 'x': props[2], 'y': props[3], 'width': props[4], 'height': props[5] }) resize(applications) """ Main method, check the arguments and call the appropriated method to process the applications. """ def run(): if len(sys.argv) > 2: if sys.argv[1] == "--file": handle_file(sys.argv[2]) else: handle_args() else: print("\nInvalid number of arguments") print("\nUse the following arguments: ") print("\n") print("\nOr: ") print("\n--file ") sys.exit(0) run()
Наконец, мы создадим сочетание клавиш, это может отличаться от одного дистрибутива Linux на другой, в POP_OS! 20.04 Вы открываете Меню настроек Перейти к Сочетания клавиш Затем прокрутите вниз до нижней части списка ярлыков и нажмите на + кнопка. В окне, который запустил, вы устанавливаете имя для ярлыка, в входе команд введите путь к этому сценарию оболочки (Desktop-bootstrap.sh), например: /home/ricardo/workspace/desktop-bootstrap/desktop-bootstrap.sh
. Отказ В ярлыке вы выбираете комбинации клавиш, которые будут выполнять сценарий оболочки.
И вот и все, вы можете найти более подробную информацию об этом Репозиторий Отказ
Оригинал: “https://dev.to/ricardo_borges/how-i-open-and-resize-all-my-applications-with-just-a-keyboard-shortcut-3469”