GNOME终端的单个实例?


8

我想知道,或者可以通过以下方式设置GNOME终端:打开终端并且已经有一个实例打开时,它将显示该实例而不打开一个全新的实例。


您正在使用哪个版本的ubuntu,以及哪个环境?我问,因为您要描述的是unity和gnome-shell中的默认设置。
马丁

我正在将Ubuntu 11.10与Unity-2D结合使用。我尚未执行全新安装,但已从11.04升级。
心情

您是否使用Ctrl + Alt + T作为快捷方式?
2011年

是的,我这样做。或者我启动了一个终端,在Kupfer中键入“ ter»enter”。这些是我使用的两种方法。因为我不太经常查看Unity laucher,所以最终会遇到3、4个不同的终端。
心情

Answers:


9

我使用wmctrl编写了一个简单的shell脚本,以使Terminal更加关注。它正是我想要的。

首先,安装wmctrl sudo apt-get install wmctrl

接下来,启动一个文本编辑器,复制以下行。

#!/bin/sh
SERVICE='gnome-terminal'

if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
  wmctrl -xa $SERVICE
else
  $SERVICE
fi

将文件保存在通常保留shell脚本的位置。就我而言: ~/bin/single_instance.sh

cd到目录(cd ~/bin),并使文件可执行chmod +x single_instance.sh

现在,打开主菜单选择配件»终端性质和用脚本替换命令:~/bin/single_instance.sh

打开系统设置»键盘»快捷方式。通过给其退格键禁用启动终端快捷方式。制作自定义快捷方式。再次填写脚本的路径和名称,并为其指定组合键ctrl + alt + t

完成,单实例终端...


为什么不将您的脚本设置为默认的终端启动器呢?为什么所有添加快捷方式的步骤都如此?+1表示脚本,-1表示实施。
布鲁诺·佩雷拉

老实说,我不知道该怎么做。我查看了默认应用程序,但没有看到终端。我也确信Ubuntu的早期版本具有可以输入命令的文本字段。此版本的默认应用程序是所有下拉菜单。
心情

2

--tab添加到启动器命令。然后,您最终只有一个应用程序。打开。

~$ gnome-terminal --help-all
:
--tab       Open a new tab in the last-opened window with the default profile

不,我不需要新标签。我希望终端以我上次离开的状态移动到前景。
心情

1
这为我在Ubuntu 16.04上打开了新窗口
比利时2016年

0

如果您使用Mod4+#Mod4= Super =“ Windows”键,#即启动器中的数字)快捷方式打开任何应用程序,则这是默认行为。


是的,我知道。尽管如此,我还是必须先打开一个终端。我的意思是,当我按Control + Alt + T或在Kupfer中打开它时。我正在寻找与Chrome(例如)相同的行为:如果打开了一个实例,请向我显示该实例,如果没有实例打开一个新实例。
心情

0

我对@Mood的脚本进行了概括和简化。现在,它需要一个命令行参数,而改用pgrep。

sudo apt-get install procps

剧本:

#!/usr/bin/env bash

if pgrep $1
then
    wmctrl -xa $1
else
    $1
fi

0

我想添加自己的脚本,因为我发现它非常有用:

  1. 如果当前工作空间中有一个gnome终端,那么它将它放在最前面并给予焦点
  2. 如果当前工作空间中没有任何gnome终端,它将切换工作空间并将其找到的第一个现有gnome终端放在最前面并给予关注
  3. 如果没有运行的gnome-terminal实例,它将打开一个新实例,将其放在最前面并给予重点

我配置了Ctrl + Alt + T快捷方式来运行此脚本,并且发现它比Guake或Tilda更舒适。

#!/usr/bin/env sh

# APP is the binary name you see when you do ps
APP="gnome-terminal"
# WIN_CLASS is the window class you see when you do wmctrl -lx
WIN_CLASS="gnome-terminal-server.Gnome-terminal"

# Use the app from current workpace first, or any if not available
WORKSPACE=$(wmctrl -d | grep '\*' | cut -d ' ' -f1)
TPID=$(ps aux | pgrep $APP)
if [ "$TPID" ]
then
  QTERM_WIN=$(wmctrl -lx | grep $WIN_CLASS | grep $WORKSPACE  | awk 'NR == 1 {print $1}')
  if [ "$QTERM_WIN" ]
  then
    wmctrl -ia $QTERM_WIN
  else
    # No valid app found in the current workspace, switch to any
    QTERM_WIN=$(wmctrl -lx | grep $WIN_CLASS | awk 'NR == 1 {print $1}')
    wmctrl -ia $QTERM_WIN
  fi
else
  $APP &
fi

我将其与QTerminal结合使用,但我进行了修改以满足您的需求。祝好运

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.