![Ubuntu 14.04 在活动屏幕上启动终端](https://linux22.com/image/881851/Ubuntu%2014.04%20%E5%9C%A8%E6%B4%BB%E5%8A%A8%E5%B1%8F%E5%B9%95%E4%B8%8A%E5%90%AF%E5%8A%A8%E7%BB%88%E7%AB%AF.png)
我目前正在使用 Ubuntu 14.04两个独立的屏幕。
当我使用键盘快捷键 Ctrl+Alt+T 启动终端时,终端当前默认在左侧屏幕上打开,即使我正在处理的屏幕是左侧的屏幕。
此问题适用于gnome 终端仅有的
我在想有没有办法将终端设置为在当前活动的屏幕上启动?
谢谢。
答案1
如何在当前活动屏幕上打开一个由Ctrl++启动的新终端窗口?AltT
虽然非常与...有很大关系这个,不是重复,它需要完全不同的解决方案。您的问题特定于gnome-terminal
,并且您正在使用快捷方式启动应用程序。这两个使后台脚本变得不必要,并要求提供一些其他信息。
解决方案
由于您通过快捷键启动终端,因此创建一个干净的方案相对容易;我们可以简单地替换由++Ctrl调用的命令来运行包装器脚本。此包装器将启动一个新实例,等待新窗口出现,查看鼠标的当前位置并将新窗口移动到相应的屏幕。AltTgnome-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)
如何使用
该脚本需要
wmctrl
和xdotool
:sudo apt-get install wmctrl xdotool
- 将上述脚本复制到一个空文件中,另存为
move_terminal.py
现在我们需要改变默认命令,通过++Ctrl运行AltT
首先通过以下命令禁用当前快捷方式:
gsettings set org.gnome.settings-daemon.plugins.media-keys terminal ""
这将使快捷方式再次可用。
然后向自定义快捷键添加新命令:选择:系统设置>“键盘”>“快捷键”>“自定义快捷键”。单击“+”并添加命令:
python3 /path/to/move_terminal.py
快捷方式Ctrl++AltT
现在,gnome-terminal
由Ctrl++启动的新窗口将始终“跟随”当前活动屏幕。AltT
笔记
如果没有连接第二个屏幕,Ctrl++Alt将T只打开一个新的终端窗口。