Ubuntu 14.04 Запустить терминал на активном экране

Ubuntu 14.04 Запустить терминал на активном экране

В настоящее время я работаю над Ubuntu 14.04 надва отдельных экрана.

Когда я использую сочетание клавиш для запуска терминала Ctrl+Alt+T, терминал по умолчанию открывается на экране слева, даже если экран, на котором я работаю, находится слева.

Эта проблема касаетсяgnome-терминалтолько

мне любопытноесть ли способ настроить терминал на запуск на том экране, который в данный момент активен??

Спасибо.

решение1

Как сделать так, чтобы новое окно терминала, инициированное нажатием Ctrl+ Alt+, Tбыло открыто на текущем активном экране?

ХотяОченьво многом связан сВот этот, не дубликат, и он требует совершенно другого решения. Ваш вопрос относится к gnome-terminal, и вы используете ярлык для запуска приложения. Эти два делают фоновый скрипт ненужным и запрашивают некоторую дополнительную информацию.

Решение

Поскольку вы запускаете терминал с помощью сочетания клавиш, относительно легко создать чистое решение; мы можем просто заменить команду, вызываемую с помощью Ctrl+ Alt+ T, на запуск скрипта-обертки. Эта обертка запустит новый экземпляр, дождется появления нового окна, проверит текущее положение мыши и переместит новое gnome-terminalокно на соответствующий экран.

Сценарий

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

app = "gnome-terminal"

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8").strip()

def screen_limit():
    screendata = [s for s in get("xrandr").split() if s.count("+") == 2]
    if len(screendata) == 2:
        return int([s.split("x")[0] for s in screendata if "+0+0" in s][0])

rightside = screen_limit()
if rightside:
    ws1 = get(["wmctrl", "-lpG"]); t = 0
    subprocess.Popen(app)
    while t < 30:      
        ws2 = [w for w in get(["wmctrl", "-lpG"]).splitlines() if not w in ws1]
        if ws2:
            try:
                pid = get(["pgrep", "-f", app])
            except subprocess.CalledProcessError:
                pass
            else:
                match = [w for w in ws2 if pid in w]
                if match:
                    match = match[0].split()
                    mousepos = int(get(["xdotool", "getmouselocation"]).split()[0].split(":")[1])
                    check = [mousepos < rightside, int(match[3]) < rightside]
                    if check[0] != check[1]:
                        cmd = ["xdotool", "windowmove", match[0], str(int(match[3]) + rightside), match[4]] \
                              if check[0] == False else \
                              ["xdotool", "windowmove", match[0], str(int(match[3]) - rightside), match[4]]                       
                        subprocess.Popen(cmd)
                    break
        time.sleep(0.5); t += 1
else:
    subprocess.Popen(app)

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

  1. Скрипту нужны оба wmctrlварианта xdotool:

    sudo apt-get install wmctrl xdotool
    
  2. Скопируйте приведенный выше скрипт в пустой файл, сохраните его какmove_terminal.py
  3. Теперь нам нужно изменить команду по умолчанию, запускаемую с помощью Ctrl+ Alt+T

    • сначала отключите текущий ярлык командой:

      gsettings set org.gnome.settings-daemon.plugins.media-keys terminal ""
      

      Это снова сделает ярлык доступным.

    • Затем добавьте новую команду в Custom Shortcut Keys: выберите: Системные настройки > «Клавиатура» > «Сочетания клавиш» > «Пользовательские сочетания клавиш». Нажмите «+» и добавьте команду:

      python3 /path/to/move_terminal.py
      

      на ярлык Ctrl+ Alt+T

Теперь ваше новое gnome-terminalокно, запущенное с помощью Ctrl+ Alt+, Tвсегда будет «следовать» за текущим активным экраном.

Примечание

Если второй экран не подключен, Ctrl+ Alt+ Tпросто откроет новое окно терминала.

Связанный контент