Перемещение окон между мониторами с помощью клавиш со стрелками Windows + [dубликат]

Предложение заключается в том, чтобы добавить к bash функцию, которая будет заменять два файла:

nano .bashrc

вставить в нижней части файла:

function swap()         
{
  if [ $# -ne 2 ]; then
    echo "Usage: swap file1 file2"
  else
    local TMPFILE=$(mktemp)
    mv "$1" $TMPFILE
    mv "$2" "$1"
    mv $TMPFILE "$2"
  fi
}

либо logout / login или run:

source .bashrc

Для замены двух файлов:

swap x y

где x и y - ваши имена файлов

source [ ! d5]

5
задан 6 April 2017 в 15:03

9 ответов

[D0] 1. Сценарий для замены всех окон с экрана 1 -> экрана 2 и наоборот

Сценарий предполагает, что экраны имеют одинаковое вертикальное разрешение, а левый экран является основным.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl Скопируйте сценарий ниже в пустой файл, сохраните его как swap_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, и сделайте исполняемый файл сценария. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы или запустите его в терминале: source ~/.profile. test запустить скрипт с помощью команды: swap_windows Если все работает так, как ожидалось, добавьте ключ сокращения; выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду

Сценарий

#!/usr/bin/env python3 import subprocess import sys def get(cmd): return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8") def get_shiftright(xr_output): lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split() return int([it for it in lines if "x" in it][0].split("x")[0]) def get_shiftleft(xr_output): lines = [l for l in xr_output.splitlines() if "+0" in l and not "+0+0" in l][0].split() return -int([it for it in lines if "x" in it][0].split("x")[0]) def swap_windows(): xr_output = get("xrandr") shift_r = get_shiftright(xr_output) shift_l = get_shiftleft(xr_output) w_data = [l.split() for l in get("wmctrl -lG").splitlines()] for w in w_data: props = get("xprop -id "+w[0]) if any(["_TYPE_NORMAL" in props, "TYPE_DIALOG" in props]): if 0 < int(w[2]) < shift_r: shift = shift_r elif shift_r-shift_l > int(w[2]) >= shift_r: shift = -shift_r else: shift = 0 command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]]) subprocess.Popen(["/bin/bash", "-c", command]) swap_windows()

2. Скрипт для перемещения (всех) окон с одного монитора на другой

Скрипт, приведенный ниже, перемещает окна в режиме двойного монитора с одного экрана на другой:

слева направо правый монитор -> или справа на левый монитор & lt; -

В зависимости от аргумента вы запускаете его с помощью [left или right)

Скрипт (опять же) предполагает, что экраны имеют одинаковое вертикальное разрешение , а левый экран является основным.

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

Для установки скрипта необходимо установить wmctrl:

sudo apt-get install wmctrl Скопируйте сценарий ниже в пустой файл, сохраните его как swap_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, и сделайте исполняемый файл сценария. Если вы только что создали каталог ~/bin (он еще не существовал), выйдите из него или запустите его в терминале: [F21]. Если вы только что создали каталог ~/bin (его еще не было), выйдите из него или запустите его в терминале: source ~/.profile. Если все работает так, как ожидалось, добавьте скрипт в две сочетания клавиш: выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команды, как описано выше.

Сценарий

#!/usr/bin/env python3 import subprocess import sys vec = sys.argv[1] def get(cmd): return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8") def get_shiftright(xr_output): lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split() return int([it for it in lines if "x" in it][0].split("x")[0]) def get_shiftleft(xr_output): lines = [l for l in xr_output.splitlines() if "+0" in l and not "+0+0" in l][0].split() return -int([it for it in lines if "x" in it][0].split("x")[0]) def shift_windows(): xr_output = get("xrandr") shift_r = get_shiftright(xr_output) shift_l = get_shiftleft(xr_output) w_data = [l.split() for l in get("wmctrl -lG").splitlines()] for w in w_data: props = get("xprop -id "+w[0]) if vec == "right": check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) shift = shift_r if vec == "left": check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) shift = -shift_r if check == 2: command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]]) subprocess.Popen(["/bin/bash", "-c", command]) shift_windows()

3. Перемещение одного окна с одного экрана на другой

. Хотя это не буквально ваш вопрос, всего несколькими строками, вы можете перемещать окна horizontal с одного экрана на другой, но (!)

С помощью приведенного ниже сценария вы можете перемещать все окна с помощью команды:

shift_windows right

или перемещать одно окно с помощью команда:

shift_windows right s

Настройка почти такая же, как в приведенном выше скрипте (не забудьте установить wmctrl)

Сценарий

#!/usr/bin/env python3 import subprocess import sys vec = sys.argv[1] try: n = sys.argv[2] except IndexError: n = "a" def get(cmd): return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8") def get_shiftright(xr_output): lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split() return int([it for it in lines if "x" in it][0].split("x")[0]) def get_shiftleft(xr_output): lines = [l for l in xr_output.splitlines() if "+0" in l and not "+0+0" in l][0].split() return -int([it for it in lines if "x" in it][0].split("x")[0]) def shift_windows(): xr_output = get("xrandr") shift_r = get_shiftright(xr_output) shift_l = get_shiftleft(xr_output) w_data = [l.split() for l in get("wmctrl -lG").splitlines()] if n == "s": frontmost = [l for l in get("xprop -root").splitlines() if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1] frontmost = frontmost[:2]+"0"+frontmost[2:] w_data = [l for l in w_data if frontmost in l] for w in w_data: props = get("xprop -id "+w[0]) if vec == "right": check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) shift = shift_r if vec == "left": check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) shift = -shift_r if check == 2: command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]]) subprocess.Popen(["/bin/bash", "-c", command]) shift_windows()
4
ответ дан 18 July 2018 в 03:08
[D0] 1. Сценарий для замены всех окон с экрана 1 -> экрана 2 и наоборот

Сценарий предполагает, что экраны имеют одинаковое вертикальное разрешение, а левый экран является основным.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl Скопируйте сценарий ниже в пустой файл, сохраните его как swap_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, и сделайте исполняемый файл сценария. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы или запустите его в терминале: source ~/.profile. test запустить скрипт с помощью команды: swap_windows Если все работает так, как ожидалось, добавьте ключ сокращения; выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду

Сценарий

#!/usr/bin/env python3 import subprocess import sys def get(cmd): return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8") def get_shiftright(xr_output): lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split() return int([it for it in lines if "x" in it][0].split("x")[0]) def get_shiftleft(xr_output): lines = [l for l in xr_output.splitlines() if "+0" in l and not "+0+0" in l][0].split() return -int([it for it in lines if "x" in it][0].split("x")[0]) def swap_windows(): xr_output = get("xrandr") shift_r = get_shiftright(xr_output) shift_l = get_shiftleft(xr_output) w_data = [l.split() for l in get("wmctrl -lG").splitlines()] for w in w_data: props = get("xprop -id "+w[0]) if any(["_TYPE_NORMAL" in props, "TYPE_DIALOG" in props]): if 0 < int(w[2]) < shift_r: shift = shift_r elif shift_r-shift_l > int(w[2]) >= shift_r: shift = -shift_r else: shift = 0 command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]]) subprocess.Popen(["/bin/bash", "-c", command]) swap_windows()

2. Скрипт для перемещения (всех) окон с одного монитора на другой

Скрипт, приведенный ниже, перемещает окна в режиме двойного монитора с одного экрана на другой:

слева направо правый монитор -> или справа на левый монитор & lt; -

В зависимости от аргумента вы запускаете его с помощью [left или right)

Скрипт (опять же) предполагает, что экраны имеют одинаковое вертикальное разрешение , а левый экран является основным.

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

Для установки скрипта необходимо установить wmctrl:

sudo apt-get install wmctrl Скопируйте сценарий ниже в пустой файл, сохраните его как swap_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, и сделайте исполняемый файл сценария. Если вы только что создали каталог ~/bin (он еще не существовал), выйдите из него или запустите его в терминале: [F21]. Если вы только что создали каталог ~/bin (его еще не было), выйдите из него или запустите его в терминале: source ~/.profile. Если все работает так, как ожидалось, добавьте скрипт в две сочетания клавиш: выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команды, как описано выше.

Сценарий

#!/usr/bin/env python3 import subprocess import sys vec = sys.argv[1] def get(cmd): return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8") def get_shiftright(xr_output): lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split() return int([it for it in lines if "x" in it][0].split("x")[0]) def get_shiftleft(xr_output): lines = [l for l in xr_output.splitlines() if "+0" in l and not "+0+0" in l][0].split() return -int([it for it in lines if "x" in it][0].split("x")[0]) def shift_windows(): xr_output = get("xrandr") shift_r = get_shiftright(xr_output) shift_l = get_shiftleft(xr_output) w_data = [l.split() for l in get("wmctrl -lG").splitlines()] for w in w_data: props = get("xprop -id "+w[0]) if vec == "right": check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) shift = shift_r if vec == "left": check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) shift = -shift_r if check == 2: command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]]) subprocess.Popen(["/bin/bash", "-c", command]) shift_windows()

3. Перемещение одного окна с одного экрана на другой

. Хотя это не буквально ваш вопрос, всего несколькими строками, вы можете перемещать окна horizontal с одного экрана на другой, но (!)

С помощью приведенного ниже сценария вы можете перемещать все окна с помощью команды:

shift_windows right

или перемещать одно окно с помощью команда:

shift_windows right s

Настройка почти такая же, как в приведенном выше скрипте (не забудьте установить wmctrl)

Сценарий

#!/usr/bin/env python3 import subprocess import sys vec = sys.argv[1] try: n = sys.argv[2] except IndexError: n = "a" def get(cmd): return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8") def get_shiftright(xr_output): lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split() return int([it for it in lines if "x" in it][0].split("x")[0]) def get_shiftleft(xr_output): lines = [l for l in xr_output.splitlines() if "+0" in l and not "+0+0" in l][0].split() return -int([it for it in lines if "x" in it][0].split("x")[0]) def shift_windows(): xr_output = get("xrandr") shift_r = get_shiftright(xr_output) shift_l = get_shiftleft(xr_output) w_data = [l.split() for l in get("wmctrl -lG").splitlines()] if n == "s": frontmost = [l for l in get("xprop -root").splitlines() if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1] frontmost = frontmost[:2]+"0"+frontmost[2:] w_data = [l for l in w_data if frontmost in l] for w in w_data: props = get("xprop -id "+w[0]) if vec == "right": check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) shift = shift_r if vec == "left": check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) shift = -shift_r if check == 2: command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]]) subprocess.Popen(["/bin/bash", "-c", command]) shift_windows()
4
ответ дан 24 July 2018 в 17:45

1. Скрипт для замены всех окон с экрана 1 -> экран 2 и наоборот

Сценарий предполагает, что экраны имеют одинаковое вертикальное разрешение, а левый экран является основным , Горизонтальные разрешения обоих экранов просматриваются сценарием.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как swap_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл скрипта .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы или запустите в терминале: source ~/.profile.
  3. проверьте запуск сценария с помощью команды:
    swap_windows
    
  4. Если все работает так, как ожидалось, добавьте ключ сокращения; выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду

Сценарий

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

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def swap_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if any(["_TYPE_NORMAL" in props, "TYPE_DIALOG" in props]):    
            if 0 < int(w[2]) < shift_r:
                shift = shift_r
            elif shift_r-shift_l > int(w[2]) >= shift_r:
                shift = -shift_r
            else:
                shift = 0
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])     
swap_windows()


2. Скрипт для перемещения всех окон с одного монитора на другой

Сценарий, приведенный ниже, перемещает окна в режиме двойного монитора с одного экрана на другой:

  • из слева на правый монитор -> или
  • справа на левый монитор & lt; -

В зависимости от аргумента, с которым вы запускаете его (left или right)

Сценарий (снова) предполагает, что экраны имеют одинаковое вертикальное разрешение , а левый экран является основным. Горизонтальные разрешения обоих экранов просматриваются скриптом.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как shift_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл сценария .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы / запустите или запустите в терминале: source ~/.profile.
  3. проверить запуск сценария с помощью команд
    shift_windows right
    
    и: shift_windows left В первом случае окна на вашем влево экран должен перейти на правый экран и во втором случае наоборот.
  4. Если все работает так, как ожидалось, добавьте скрипт в две комбинации ярлыков: выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команды, как описано выше.

Сценарий

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

vec = sys.argv[1]

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()


3. Перемещение одного окна с одного экрана на другой

. Хотя это не буквально ваш вопрос, всего несколькими строками, вы можете либо переместить все окна с одного экрана на другой, но также один (самый передний) с комбинацией клавиш.

С помощью приведенного ниже сценария вы можете переместить все окна с помощью команды:

shift_windows right

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

shift_windows right s

Настройка почти такая же, как в приведенном выше скрипте (не забудьте установить wmctrl)

скрипт

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

vec = sys.argv[1]
try:
    n = sys.argv[2]
except IndexError:
    n = "a"

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    if n == "s":
        frontmost = [l for l in get("xprop -root").splitlines() if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1]
        frontmost = frontmost[:2]+"0"+frontmost[2:]
        w_data = [l for l in w_data if frontmost in l]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()
4
ответ дан 31 July 2018 в 20:48

1. Скрипт для замены всех окон с экрана 1 -> экран 2 и наоборот

Сценарий предполагает, что экраны имеют одинаковое вертикальное разрешение, а левый экран является основным , Горизонтальные разрешения обоих экранов просматриваются сценарием.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как swap_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл скрипта .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы или запустите в терминале: source ~/.profile.
  3. проверьте запуск сценария с помощью команды:
    swap_windows
    
  4. Если все работает так, как ожидалось, добавьте ключ сокращения; выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду

Сценарий

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

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def swap_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if any(["_TYPE_NORMAL" in props, "TYPE_DIALOG" in props]):    
            if 0 < int(w[2]) < shift_r:
                shift = shift_r
            elif shift_r-shift_l > int(w[2]) >= shift_r:
                shift = -shift_r
            else:
                shift = 0
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])     
swap_windows()


2. Скрипт для перемещения всех окон с одного монитора на другой

Сценарий, приведенный ниже, перемещает окна в режиме двойного монитора с одного экрана на другой:

  • из слева на правый монитор -> или
  • справа на левый монитор & lt; -

В зависимости от аргумента, с которым вы запускаете его (left или right)

Сценарий (снова) предполагает, что экраны имеют одинаковое вертикальное разрешение , а левый экран является основным. Горизонтальные разрешения обоих экранов просматриваются скриптом.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как shift_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл сценария .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы / запустите или запустите в терминале: source ~/.profile.
  3. проверить запуск сценария с помощью команд
    shift_windows right
    
    и: shift_windows left В первом случае окна на вашем влево экран должен перейти на правый экран и во втором случае наоборот.
  4. Если все работает так, как ожидалось, добавьте скрипт в две комбинации ярлыков: выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команды, как описано выше.

Сценарий

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

vec = sys.argv[1]

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()


3. Перемещение одного окна с одного экрана на другой

. Хотя это не буквально ваш вопрос, всего несколькими строками, вы можете либо переместить все окна с одного экрана на другой, но также один (самый передний) с комбинацией клавиш.

С помощью приведенного ниже сценария вы можете переместить все окна с помощью команды:

shift_windows right

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

shift_windows right s

Настройка почти такая же, как в приведенном выше скрипте (не забудьте установить wmctrl)

скрипт

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

vec = sys.argv[1]
try:
    n = sys.argv[2]
except IndexError:
    n = "a"

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    if n == "s":
        frontmost = [l for l in get("xprop -root").splitlines() if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1]
        frontmost = frontmost[:2]+"0"+frontmost[2:]
        w_data = [l for l in w_data if frontmost in l]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()
4
ответ дан 2 August 2018 в 13:54

1. Скрипт для замены всех окон с экрана 1 -> экран 2 и наоборот

Сценарий предполагает, что экраны имеют одинаковое вертикальное разрешение, а левый экран является основным , Горизонтальные разрешения обоих экранов просматриваются сценарием.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как swap_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл скрипта .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы или запустите в терминале: source ~/.profile.
  3. проверьте запуск сценария с помощью команды:
    swap_windows
    
  4. Если все работает так, как ожидалось, добавьте ключ сокращения; выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду

Сценарий

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

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def swap_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if any(["_TYPE_NORMAL" in props, "TYPE_DIALOG" in props]):    
            if 0 < int(w[2]) < shift_r:
                shift = shift_r
            elif shift_r-shift_l > int(w[2]) >= shift_r:
                shift = -shift_r
            else:
                shift = 0
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])     
swap_windows()


2. Скрипт для перемещения всех окон с одного монитора на другой

Сценарий, приведенный ниже, перемещает окна в режиме двойного монитора с одного экрана на другой:

  • из слева на правый монитор -> или
  • справа на левый монитор & lt; -

В зависимости от аргумента, с которым вы запускаете его (left или right)

Сценарий (снова) предполагает, что экраны имеют одинаковое вертикальное разрешение , а левый экран является основным. Горизонтальные разрешения обоих экранов просматриваются скриптом.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как shift_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл сценария .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы / запустите или запустите в терминале: source ~/.profile.
  3. проверить запуск сценария с помощью команд
    shift_windows right
    
    и: shift_windows left В первом случае окна на вашем влево экран должен перейти на правый экран и во втором случае наоборот.
  4. Если все работает так, как ожидалось, добавьте скрипт в две комбинации ярлыков: выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команды, как описано выше.

Сценарий

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

vec = sys.argv[1]

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()


3. Перемещение одного окна с одного экрана на другой

. Хотя это не буквально ваш вопрос, всего несколькими строками, вы можете либо переместить все окна с одного экрана на другой, но также один (самый передний) с комбинацией клавиш.

С помощью приведенного ниже сценария вы можете переместить все окна с помощью команды:

shift_windows right

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

shift_windows right s

Настройка почти такая же, как в приведенном выше скрипте (не забудьте установить wmctrl)

скрипт

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

vec = sys.argv[1]
try:
    n = sys.argv[2]
except IndexError:
    n = "a"

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    if n == "s":
        frontmost = [l for l in get("xprop -root").splitlines() if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1]
        frontmost = frontmost[:2]+"0"+frontmost[2:]
        w_data = [l for l in w_data if frontmost in l]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()
4
ответ дан 3 August 2018 в 18:04

1. Скрипт для замены всех окон с экрана 1 -> экран 2 и наоборот

Сценарий предполагает, что экраны имеют одинаковое вертикальное разрешение, а левый экран является основным , Горизонтальные разрешения обоих экранов просматриваются сценарием.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как swap_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл скрипта .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы или запустите в терминале: source ~/.profile.
  3. проверьте запуск сценария с помощью команды:
    swap_windows
    
  4. Если все работает так, как ожидалось, добавьте ключ сокращения; выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду

Сценарий

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

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def swap_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if any(["_TYPE_NORMAL" in props, "TYPE_DIALOG" in props]):    
            if 0 < int(w[2]) < shift_r:
                shift = shift_r
            elif shift_r-shift_l > int(w[2]) >= shift_r:
                shift = -shift_r
            else:
                shift = 0
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])     
swap_windows()


2. Скрипт для перемещения всех окон с одного монитора на другой

Сценарий, приведенный ниже, перемещает окна в режиме двойного монитора с одного экрана на другой:

  • из слева на правый монитор -> или
  • справа на левый монитор & lt; -

В зависимости от аргумента, с которым вы запускаете его (left или right)

Сценарий (снова) предполагает, что экраны имеют одинаковое вертикальное разрешение , а левый экран является основным. Горизонтальные разрешения обоих экранов просматриваются скриптом.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как shift_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл сценария .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы / запустите или запустите в терминале: source ~/.profile.
  3. проверить запуск сценария с помощью команд
    shift_windows right
    
    и: shift_windows left В первом случае окна на вашем влево экран должен перейти на правый экран и во втором случае наоборот.
  4. Если все работает так, как ожидалось, добавьте скрипт в две комбинации ярлыков: выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команды, как описано выше.

Сценарий

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

vec = sys.argv[1]

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()


3. Перемещение одного окна с одного экрана на другой

. Хотя это не буквально ваш вопрос, всего несколькими строками, вы можете либо переместить все окна с одного экрана на другой, но также один (самый передний) с комбинацией клавиш.

С помощью приведенного ниже сценария вы можете переместить все окна с помощью команды:

shift_windows right

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

shift_windows right s

Настройка почти такая же, как в приведенном выше скрипте (не забудьте установить wmctrl)

скрипт

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

vec = sys.argv[1]
try:
    n = sys.argv[2]
except IndexError:
    n = "a"

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    if n == "s":
        frontmost = [l for l in get("xprop -root").splitlines() if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1]
        frontmost = frontmost[:2]+"0"+frontmost[2:]
        w_data = [l for l in w_data if frontmost in l]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()
4
ответ дан 5 August 2018 в 03:12

1. Скрипт для замены всех окон с экрана 1 -> экран 2 и наоборот

Сценарий предполагает, что экраны имеют одинаковое вертикальное разрешение, а левый экран является основным , Горизонтальные разрешения обоих экранов просматриваются сценарием.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как swap_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл скрипта .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы или запустите в терминале: source ~/.profile.
  3. проверьте запуск сценария с помощью команды:
    swap_windows
    
  4. Если все работает так, как ожидалось, добавьте ключ сокращения; выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду

Сценарий

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

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def swap_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if any(["_TYPE_NORMAL" in props, "TYPE_DIALOG" in props]):    
            if 0 < int(w[2]) < shift_r:
                shift = shift_r
            elif shift_r-shift_l > int(w[2]) >= shift_r:
                shift = -shift_r
            else:
                shift = 0
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])     
swap_windows()


2. Скрипт для перемещения всех окон с одного монитора на другой

Сценарий, приведенный ниже, перемещает окна в режиме двойного монитора с одного экрана на другой:

  • из слева на правый монитор -> или
  • справа на левый монитор & lt; -

В зависимости от аргумента, с которым вы запускаете его (left или right)

Сценарий (снова) предполагает, что экраны имеют одинаковое вертикальное разрешение , а левый экран является основным. Горизонтальные разрешения обоих экранов просматриваются скриптом.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как shift_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл сценария .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы / запустите или запустите в терминале: source ~/.profile.
  3. проверить запуск сценария с помощью команд
    shift_windows right
    
    и: shift_windows left В первом случае окна на вашем влево экран должен перейти на правый экран и во втором случае наоборот.
  4. Если все работает так, как ожидалось, добавьте скрипт в две комбинации ярлыков: выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команды, как описано выше.

Сценарий

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

vec = sys.argv[1]

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()


3. Перемещение одного окна с одного экрана на другой

. Хотя это не буквально ваш вопрос, всего несколькими строками, вы можете либо переместить все окна с одного экрана на другой, но также один (самый передний) с комбинацией клавиш.

С помощью приведенного ниже сценария вы можете переместить все окна с помощью команды:

shift_windows right

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

shift_windows right s

Настройка почти такая же, как в приведенном выше скрипте (не забудьте установить wmctrl)

скрипт

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

vec = sys.argv[1]
try:
    n = sys.argv[2]
except IndexError:
    n = "a"

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    if n == "s":
        frontmost = [l for l in get("xprop -root").splitlines() if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1]
        frontmost = frontmost[:2]+"0"+frontmost[2:]
        w_data = [l for l in w_data if frontmost in l]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()
4
ответ дан 6 August 2018 в 20:04

1. Скрипт для замены всех окон с экрана 1 -> экран 2 и наоборот

Сценарий предполагает, что экраны имеют одинаковое вертикальное разрешение, а левый экран является основным , Горизонтальные разрешения обоих экранов просматриваются сценарием.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как swap_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл скрипта .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы или запустите в терминале: source ~/.profile.
  3. проверьте запуск сценария с помощью команды:
    swap_windows
    
  4. Если все работает так, как ожидалось, добавьте ключ сокращения; выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду

Сценарий

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

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def swap_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if any(["_TYPE_NORMAL" in props, "TYPE_DIALOG" in props]):    
            if 0 < int(w[2]) < shift_r:
                shift = shift_r
            elif shift_r-shift_l > int(w[2]) >= shift_r:
                shift = -shift_r
            else:
                shift = 0
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])     
swap_windows()


2. Скрипт для перемещения всех окон с одного монитора на другой

Сценарий, приведенный ниже, перемещает окна в режиме двойного монитора с одного экрана на другой:

  • из слева на правый монитор -> или
  • справа на левый монитор & lt; -

В зависимости от аргумента, с которым вы запускаете его (left или right)

Сценарий (снова) предполагает, что экраны имеют одинаковое вертикальное разрешение , а левый экран является основным. Горизонтальные разрешения обоих экранов просматриваются скриптом.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как shift_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл сценария .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы / запустите или запустите в терминале: source ~/.profile.
  3. проверить запуск сценария с помощью команд
    shift_windows right
    
    и: shift_windows left В первом случае окна на вашем влево экран должен перейти на правый экран и во втором случае наоборот.
  4. Если все работает так, как ожидалось, добавьте скрипт в две комбинации ярлыков: выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команды, как описано выше.

Сценарий

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

vec = sys.argv[1]

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()


3. Перемещение одного окна с одного экрана на другой

. Хотя это не буквально ваш вопрос, всего несколькими строками, вы можете либо переместить все окна с одного экрана на другой, но также один (самый передний) с комбинацией клавиш.

С помощью приведенного ниже сценария вы можете переместить все окна с помощью команды:

shift_windows right

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

shift_windows right s

Настройка почти такая же, как в приведенном выше скрипте (не забудьте установить wmctrl)

скрипт

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

vec = sys.argv[1]
try:
    n = sys.argv[2]
except IndexError:
    n = "a"

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    if n == "s":
        frontmost = [l for l in get("xprop -root").splitlines() if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1]
        frontmost = frontmost[:2]+"0"+frontmost[2:]
        w_data = [l for l in w_data if frontmost in l]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()
4
ответ дан 9 August 2018 в 00:31

1. Скрипт для замены всех окон с экрана 1 -> экран 2 и наоборот

Сценарий предполагает, что экраны имеют одинаковое вертикальное разрешение, а левый экран является основным , Горизонтальные разрешения обоих экранов просматриваются сценарием.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как swap_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл скрипта .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы или запустите в терминале: source ~/.profile.
  3. проверьте запуск сценария с помощью команды:
    swap_windows
    
  4. Если все работает так, как ожидалось, добавьте ключ сокращения; выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду

Сценарий

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

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def swap_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if any(["_TYPE_NORMAL" in props, "TYPE_DIALOG" in props]):    
            if 0 < int(w[2]) < shift_r:
                shift = shift_r
            elif shift_r-shift_l > int(w[2]) >= shift_r:
                shift = -shift_r
            else:
                shift = 0
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])     
swap_windows()


2. Скрипт для перемещения всех окон с одного монитора на другой

Сценарий, приведенный ниже, перемещает окна в режиме двойного монитора с одного экрана на другой:

  • из слева на правый монитор -> или
  • справа на левый монитор & lt; -

В зависимости от аргумента, с которым вы запускаете его (left или right)

Сценарий (снова) предполагает, что экраны имеют одинаковое вертикальное разрешение , а левый экран является основным. Горизонтальные разрешения обоих экранов просматриваются скриптом.

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

Для сценария необходимо установить wmctrl:

sudo apt-get install wmctrl
  1. Скопируйте сценарий ниже в пустой файл, сохраните его как shift_windows (без расширения) в ~/.bin. Создайте каталог, если он еще не существует, а сделает исполняемый файл сценария .
  2. Если вы только что создали каталог ~/bin (его еще не было), либо выйдите из системы / запустите или запустите в терминале: source ~/.profile.
  3. проверить запуск сценария с помощью команд
    shift_windows right
    
    и: shift_windows left В первом случае окна на вашем влево экран должен перейти на правый экран и во втором случае наоборот.
  4. Если все работает так, как ожидалось, добавьте скрипт в две комбинации ярлыков: выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команды, как описано выше.

Сценарий

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

vec = sys.argv[1]

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()


3. Перемещение одного окна с одного экрана на другой

. Хотя это не буквально ваш вопрос, всего несколькими строками, вы можете либо переместить все окна с одного экрана на другой, но также один (самый передний) с комбинацией клавиш.

С помощью приведенного ниже сценария вы можете переместить все окна с помощью команды:

shift_windows right

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

shift_windows right s

Настройка почти такая же, как в приведенном выше скрипте (не забудьте установить wmctrl)

скрипт

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

vec = sys.argv[1]
try:
    n = sys.argv[2]
except IndexError:
    n = "a"

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c",  cmd]).decode("utf-8")

def get_shiftright(xr_output):
    lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
    return int([it for it in lines if "x" in it][0].split("x")[0])

def get_shiftleft(xr_output):
    lines = [l for l in xr_output.splitlines() if  "+0" in l and not "+0+0" in l][0].split()
    return -int([it for it in lines if "x" in it][0].split("x")[0])

def shift_windows():
    xr_output = get("xrandr")
    shift_r = get_shiftright(xr_output)
    shift_l = get_shiftleft(xr_output)
    w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
    if n == "s":
        frontmost = [l for l in get("xprop -root").splitlines() if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1]
        frontmost = frontmost[:2]+"0"+frontmost[2:]
        w_data = [l for l in w_data if frontmost in l]
    for w in w_data:
        props = get("xprop -id "+w[0])
        if vec == "right":
            check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = shift_r
        if vec == "left":
            check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
            shift = -shift_r
        if check == 2:
            command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
            subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()
4
ответ дан 14 August 2018 в 18:42

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

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