Как исправить (сделать) окна приложений открытыми в нужном месте рабочего стола?

Например, я хочу, чтобы окно SMPlayer всегда открывалось посередине рабочего стола, потому что, когда я помещаю его в середину каждый раз, когда я запускаю, оно со временем поднимается влево, поэтому мне нужно перетащить его назад, и я вроде не нравится повторять это снова и снова.

Так как мне сделать, чтобы открытое окно приложения было размещено там, где я хочу?

0
задан 12 April 2015 в 23:48

1 ответ

Если Вы запускаете скрипт ниже с аргументами:

<application> <x> <y>

Окно приложения будет помещено в x, y на Вашем экране.

Как настроить

Сценарий использует обоих wmctrl и xdotool:

sudo apt-get install wmctrl
sudo apt-get install xdotool

Затем:

  1. Самый изящный путь состоит в том, чтобы Скопировать сценарий в пустой файл и сохранить его в ~/bin (Вам, возможно, придется создать каталог), как place_window (никакое расширение)
  2. Сделайте исполняемый файл сценария (!)
  3. Если Вы просто создали ~/bin, или выйдите из системы / в или выполните команду:

    source ~/.profile
    
  4. Тестовый прогон это с командой (например):

    place_window gedit 100 100
    

    gedit окно должно появиться в x = 100, y = 100 на Вашем экране.

Если все хорошо работает, можно или подвергнуть команду комбинации ярлыка (выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки"), или в нем как quicklist - ярлык на средство запуска приложения.

Сценарий:

#!/usr/bin/env python3
import subprocess
import getpass
import time
import sys

app = sys.argv[1]
user = getpass.getuser()
get = lambda x: subprocess.check_output(["/bin/bash", "-c", x]).decode("utf-8")
ws1 = get("wmctrl -lp"); t = 0
subprocess.Popen(["/bin/bash", "-c", app])

while t < 30:      
    ws2 = [w.split()[0:3] for w in get("wmctrl -lp").splitlines() if not w in ws1]
    procs = [[(p, w[0]) for p in get("ps -u "+user).splitlines() \
              if app[:14] in p and w[2] in p] for w in ws2]
    if len(procs) > 0:
        w_id = procs[0][0][1]   
        cmd1 = "wmctrl -ir "+w_id+" -b remove,maximized_vert remove,maximized_horz"
        cmd2 = "xdotool windowmove "+w_id+" "+sys.argv[2]+" "+sys.argv[3]
        for cmd in [cmd1, cmd2]:
            subprocess.call(["/bin/bash", "-c", cmd])
        break
    time.sleep(0.5)
    t = t+1

Как это работает

Сценарии выполняют команду для запущения приложения, ожидают соответствующего окна, чтобы казаться, (ожидающий pid произвести новое окно) и располагают его в координаты, которые Вы определяете.

place_window gedit 50 150

enter image description here

place_window gedit 150 50

enter image description here

Установка команды как quicklist объект

Самое изящное должно было бы добавить его как сочетание клавиш, или, альтернативно, как quicklist объект:

enter image description here

В этом случае, команда для использования в Exec= строка была бы, например:

Exec=/bin/bash -c "place_window gedit 600 600"
1
ответ дан 12 April 2015 в 23:48

Другие вопросы по тегам:

Похожие вопросы: