Каждое утро я должен открыть, изменить размер и переместить все приложения, которые мне нужно работать, поэтому я подумал: что если бы мне только пришлось нажать ярлык клавиатуры, который мог бы сделать для меня …
Чтобы это произошло, мне нужно будет написать сценарий, который будет выполнен с помощью этого ярлыка, этот скрипт придется делать три задания: открытые приложения, подождите, пока он начнут и измените размер и изменение изменения их.
Перед продолжением, это было разработано и проверено на 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”