Как вынудить окно приложения автоматически максимизироваться после запущения приложения?

Я пытался использовать Docky, затем я удалил его и после того, как тот мой браузер (Хром) не может быть открыт в максимальной высоте, каждый раз, когда я должен максимизировать его сам. (Рабочий стол XFCE)

3
задан 16 November 2015 в 16:03

1 ответ

Как запустить приложение (любой) максимизируемый

Запуская приложение с помощью сценария ниже, можно вызвать любое приложение* запускаться максимизируемый. Если Вы любая замена основная команда в (копия-) Ваш .desktop файл командой для запущения скрипта (см. далее ниже, как сделать это) или добавляет его как quicklist ярлык, можно достигнуть точно, что Вы хотите.

(* Некоторые приложения имеют фиксированный, неизменный windowsize, некоторые окна открывают новую вкладку в возможно уже открытом окне),

О сценарии

Сценарий работает с командой:

python3 /path/to/script <application>

Сценарий:

  • первые выполнения команда для открытия приложения
  • для предотвращения проблем синхронизации это затем ожидает (нового) окна приложения для появления (путем нахождения соответствия между pid и id из соответствующего окна) в выводе wmctrl -lp - команда (в течение только 15 секунд, для предотвращения бесконечного цикла)
  • После того как окно появляется, оно максимизирует окно с командой:

    xdotool windowsize <window_id> 100% 100%
    

Код

#!/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(x).decode("utf-8")
ws1 = get(["wmctrl", "-lp"]); t = 0
subprocess.Popen(app)
while t < 30:      
    ws2 = [(w.split()[2], w.split()[0]) for w in get(["wmctrl", "-lp"]).splitlines() if not w in ws1]
    procs = sum([[(w[1], p) for p in get(["ps", "-u", user]).splitlines() \
              if app[:15].lower() in p.lower() and w[0] in p] for w in ws2], [])
    if len(procs) > 0:
        subprocess.call(["xdotool", "windowsize", "-sync", procs[0][0] , "100%", "100%"])
        break
    time.sleep(0.5)
    t = t+1

Как использовать

  1. Для сценария нужны оба wmctrl и xdotool

    sudo apt-get install wmctrl xdotool
    
  2. Скопируйте сценарий выше в пустой файл, сохраните его как run_maximized.py

  3. Теперь отредактируйте Ваш .desktop файл:

    • Скопируйте глобальное .desktop зарегистрируйте локально:

      cp /usr/share/applications/chromium-browser.desktop ~/.local/share/applications
      

Версия XFCE:

  1. откройте файл с gedit:

    gedit ~/.local/share/applications/chromium-browser.desktop
    

    Обзор к строке:

    Exec=chromium-browser %U
    

    (который является первой строкой, начиная с Exec=

    Измените его в:

    Exec=python3 /path/to/script.py chromium-browser
    

    где необходимо заменить /path/to/script.py фактическим путем.

  2. Выйдите из системы и въезжайте задним ходом. С этого времени Ваше средство запуска Хрома откроет максимизируемый Chromium.

Версия единицы:

  1. откройте файл с gedit:

    gedit ~/.local/share/applications/chromium-browser.desktop
    

    Обзор к строке:

    Actions=NewWindow;Incognito;TempProfile;
    

    Измените его в:

    Actions=NewWindow;Incognito;TempProfile;divider1;Open maximized;
    

    Добавление к самой нижней части файла раздел ниже:

    [Desktop Action Open maximized]
    Name=Open maximized
    Exec=python3 /path/to/script.py chromium-browser
    OnlyShowIn=Unity;
    
    [Desktop Action divider1]
    Name=.....................................
    OnlyShowIn=Unity;
    

    где необходимо заменить /path/to/script.py фактическим путем.

  2. Выйдите из системы и въезжайте задним ходом. С этого времени Ваше средство запуска Хрома похоже:

    enter image description here

Важное примечание

В a .desktop файл, необходимо использовать полные пути; ~ не будет работать, например. Это значит .desktop файлы в /usr/share/applications, ~/.local/share/applications а также команды в Приложениях Запуска (которыми на самом деле называют .desktop файлы в ~/.config/autostart).

4
ответ дан 1 December 2019 в 15:56

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

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