Перемещение окон на определенные экраны с помощью командной строки

Я думаю, что у меня была аналогичная проблема, не уверен, что это произошло из-за обновления до 13.10 или из-за ошибки пользователя. Я закончил это следующим образом:

Выход из единства и вход в tty1 (ctrl-alt-f1). «sudo apt-get purge unity» (избавляется от единства и настроек). «sudo apt-get autoremove» (избавляется от любых оставшихся пакетов, от которых зависит единство, например, линзы и т. д.) «перезагрузка sudo» и снова войти в tty1. «sudo apt-get install unity»

Бит бит, но он сработал.

1
задан 13 April 2017 в 15:23

1 ответ

Для записи, вот что я использую для комбинации этого вопроса и для восстановления нескольких настроек монитора:

# configure multiplr displays and
# move the windows to their appropriate displays

import subprocess
import os
import wmctrl
import re

mydisplays = [("VGA1",0,"left"),
              ("eDP1",1080,"normal"),
              ("HDMI1",3000,"left")]

# https://askubuntu.com/questions/702002/restore-multiple-monitor-settings
def set_displays ():
    subprocess.check_call(" && ".join([
        "xrandr --output %s --pos %dx0  --rotate %s" % d for d in mydisplays]),
                          shell=True)

# https://askubuntu.com/questions/702071/move-windows-to-specific-screens-using-the-command-line
mywindows = [("/emacs$","VGA1"),
             ("/chrome$","HDMI1"),
             ("gnome-terminal","eDP1")]
def max_windows ():
    didi = dict([(d,x) for d,x,_ in mydisplays])
    for w in wmctrl.Window.list():
        try:
            exe = os.readlink("/proc/%d/exe" % (w.pid))
            for (r,d) in mywindows:
                if re.search(r,exe):
                    x = didi[d]
                    print "%s(%s) --> %s (%d)" % (r,exe,d,x)
                    w.set_properties(("remove","maximized_vert","maximized_horz"))
                    w.resize_and_move(x,0,w.w,w.h)
                    w.set_properties(("add","maximized_vert","maximized_horz"))
                    break
        except OSError:
            continue

def cmdlines (cmd):
    return subprocess.check_output(cmd).splitlines()

def show_displays ():
    for l in cmdlines(["xrandr"]):
        if " connected " in l:
            print l

if __name__ == '__main__':
    show_displays()
    set_displays()
    show_displays()
    max_windows()

вам нужно будет использовать Восстановить настройки нескольких мониторов версии 0.3 или более поздней версии (из-за моего запроса на растяжение).

1
ответ дан 23 May 2018 в 15:31

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

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