ubuntu20.04.3LTS 实现gnome终端选中复制右键粘贴功能

前言

笔者在使用Ubuntu20.04.3LTS 的时候对自带的终端gnome终端使用很不习惯,使用的方式是选中鼠标中键粘贴,类似macOS的iterm的默认能力,但是iterm的是可以设置的。gnome终端却不行,securecrt使用习惯了,那么怎么实现选中复制右键粘贴呢。

1. 分析

选中复制,右键粘贴是2种事件:鼠标释放事件、鼠标右击事件。

Ubuntu20.04.3LTS使用gnome桌面,要实现gnome终端自定义功能,但是设置缺失相关设置,😅

只能设置鼠标快捷键,此时我们只能自己修改源代码了,来实现我们的逻辑。 

2. 实现

上面分析了,要实现这些功能,需要2种事件处理,其中gnome终端已经实现右键事件,我们需要实现鼠标选中释放事件并修改右键事件的处理逻辑。开干

2.1 获取gnome终端源码

apt-get source gnome-terminal

但是会获取失败,原因是我们没有打开源码获取,打开软件和更新,按照下图所示:

 2.2 安装gnome编译环境

sudo apt-get build-dep gnome-terminal

 如果缺失第三方lib就手动安装

2.3 源码修改

实际上要修改的源码只有gnome-terminal-3.36.2/src/terminal-screen.c(笔者使用的gnome终端版本)

1) 定义事件函数

static gboolean terminal_screen_button_press (GtkWidget *widget,
                                              GdkEventButton *event);
//增加按压释放事件
static gboolean terminal_screen_button_release (GtkWidget *widget,
                                              GdkEventButton *event);

在按压事件后增加释放事件

2) 绑定按压释放事件的执行函数

static void
terminal_screen_class_init (TerminalScreenClass *klass)
{
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
  VteTerminalClass *terminal_class = VTE_TERMINAL_CLASS (klass);
  GSettings *settings;

  object_class->constructed = terminal_screen_constructed;
  object_class->dispose = terminal_screen_dispose;
  object_class->finalize = terminal_screen_finalize;
  object_class->get_property = terminal_screen_get_property;
  object_class->set_property = terminal_screen_set_property;

  widget_class->realize = terminal_screen_realize;
  widget_class->style_updated = terminal_screen_style_updated;
  widget_class->drag_data_received = terminal_screen_drag_data_received;
  widget_class->button_press_event = terminal_screen_button_press;
  //绑定事件的执行函数
  widget_class->button_release_event = terminal_screen_button_release;

3)修改右键事件的执行函数逻辑

  if (event->type == GDK_BUTTON_PRESS && event->button == 3)
    {
      if (!(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)))
        {
          // 注释很明了,右键逻辑
          /* on right-click, we should first try to send the mouse event to
           * the client, and popup only if that's not handled. */
          //if (button_press_event && button_press_event (widget, event))
            //return TRUE;

          //terminal_screen_do_popup (screen, event, hyperlink, url, url_flavor, number_info);
          //注释上面3行代码逻辑,直接调用粘贴函数
          vte_terminal_paste_clipboard (VTE_TERMINAL (screen));
	        hyperlink = NULL; /* adopted to the popup info */
          url = NULL; /* ditto */
          number_info = NULL; /* ditto */
          return TRUE;
        }
      else if (!(event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)))
        {
          /* do popup on shift+right-click */
          terminal_screen_do_popup (screen, event, hyperlink, url, url_flavor, number_info);
          hyperlink = NULL; /* adopted to the popup info */
          url = NULL; /* ditto */
          number_info = NULL; /* ditto */
          return TRUE;
        }
    }

 4)实现选中复制函数

static gboolean
terminal_screen_button_release (GtkWidget *widget,
                                GdkEventButton *event){
    gboolean ret;

    TerminalScreen *screen = TERMINAL_SCREEN (widget);
    gboolean (* button_release_event) (GtkWidget*, GdkEventButton*) =
            GTK_WIDGET_CLASS (terminal_screen_parent_class)->button_release_event;
    ret = FALSE;
    if (button_release_event){
        ret = button_release_event (widget, event);
    }

    if (event->button == 1){
        gboolean can_copy;
        can_copy = vte_terminal_get_has_selection (VTE_TERMINAL (screen));

        if (can_copy)
            vte_terminal_copy_clipboard (VTE_TERMINAL (screen));
    }

    return ret;
}

 2.4 编译安装

改好源码后,在gnome-terminal-3.36.2目录执行

dpkg-buildpackage -us -uc -b

或者

debuild -b

编译会报错,但是实际上已经构建完成,只是执行gpg的时候缺少密匙

直接看

 2.5 安装deb

sudo dpkg -i gnome-terminal_3.36.2-1ubuntu1~20.04_amd64.deb

 安装完成,重启终端,就可以实现选中复制右键粘贴了。而且编译安装,性能最佳。

3. 注意换源情况

这里注意如果Ubuntu的gnome比较新,然后换源后,获取到旧的gnome终端代码,那么在编译过程中就会使用旧的函数导致编译报错,建议使用官方源获取最新源码,编译环境。

Ubuntu换源/etc/apt/sources.list

最好备份

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 

sudo vim /etc/apt/sources.list(可将vim更换为自己熟悉的编辑器)

#添加阿里源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
#添加清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse multiverse

总结

Ubuntu开源还是比较好的,直接修改源码来达到自己的目的,就是比较麻烦,然后编译过程还会需要自己看日志分析错误,比较折腾。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要升级20.04.1 LTS到20.04.3 LTS,您可以按照以下步骤进行操作。 首先,确保您的系统已经连接到互联网,并且具有管理员权限。您可以通过“系统设置”菜单中的“网络”选项来检查您的网络连接状态。 接下来,打开终端。您可以使用Ctrl+Alt+T组合键来快速打开终端。 在终端中,输入以下命令来更新您现有的软件包列表: sudo apt update 这会从软件源中获取最新的软件包信息。 然后,执行以下命令来进行系统升级: sudo apt upgrade 这将升级您所有已安装的软件包到最新版本。如果有需要,系统会提示您确认升级操作。 接着,输入以下命令来升级到下一个LTS版本: sudo do-release-upgrade 这会启动升级过程,系统会下载并安装20.04.3 LTS版本的所有必要的软件包。 在升级过程中,系统可能会提示您确认一些更改,如配置文件的替换或更新。请仔细阅读和理解提示信息,并按照系统的指示进行操作。 在升级完成后,重新启动您的系统以使更改生效: sudo reboot 请留意,在升级过程中,可能需要一些时间来完成所有操作。另外,强烈建议在升级前备份重要的文件和数据。 完成以上步骤后,您的系统将成功升级到20.04.3 LTS版本,享受新版本所提供的增强功能和修改。 ### 回答2: 20.04.1 LTS是Ubuntu操作系统的一个版本,而20.04.3 LTS则是其后续版本的一个更新。升级到20.04.3 LTS有以下几个步骤。 首先,确保您的计算机已连接到互联网。在升级之前,建议备份重要的文件和数据,以防止意外数据丢失。 然后,打开终端并运行以下命令来更新软件包列表: sudo apt update 接着,运行以下命令升级系统: sudo apt upgrade 系统将提示您输入管理员密码,然后会开始下载并安装可用的软件包更新。这可能需要一些时间,取决于您的互联网连接速度和系统配置。 完成升级后,您可以运行以下命令来检查系统版本: lsb_release -a 这将显示当前安装的Ubuntu版本号,如果显示为20.04.3,则表示成功升级到最新的LTS版本。 升级到20.04.3 LTS可以获得更多新功能和改进,同时还包括各种修复程序和安全更新。建议定期升级操作系统以获取最新的功能和安全性保护。 最后,记得重新启动计算机以应用所有更改。 总结起来,升级到20.04.3 LTS只需运行几个简单的命令并等待系统完成更新。确保备份重要数据,并定期更新操作系统以保持最新和安全的状态。 ### 回答3: 要将Ubuntu 20.04.1 LTS升级到20.04.3 LTS,您可以按照以下步骤操作: 1. 确保您的系统已连接到互联网,并通过更新软件源来获取最新的软件包和安全更新。 2. 打开终端(Ctrl + Alt + T),输入以下命令以更新软件源: ``` sudo apt update sudo apt upgrade ``` 此命令将更新已安装的软件包,但不会进行系统升级。 3. 在终端中,输入以下命令来安装软件更新管理工具“update-manager-core”(如果尚未安装): ``` sudo apt install update-manager-core ``` 4. 在终端中,输入以下命令以升级系统到最新的Ubuntu 20.04.3 LTS版本: ``` sudo do-release-upgrade ``` 执行此命令后,您将看到一系列提示,其中包括有关新版本的信息和升级进度。根据提示,选择“Y”(是)或“N”(否)来继续或取消升级过程。 5. 升级过程可能需要一些时间,具体时间取决于您的系统配置和互联网连接速度。请耐心等待,直到升级完成。 6. 升级完成后,您将被要求重新启动系统。在终端中,输入以下命令以重新启动: ``` sudo reboot ``` 7. 系统重新启动后,您可以验证系统是否成功升级到Ubuntu 20.04.3 LTS。在终端中,输入以下命令以检查版本信息: ``` lsb_release -a ``` 在输出中,您将看到Ubuntu版本号,确保它显示为20.04.3 LTS。 请注意,升级过程中可能会出现一些问题或冲突。为了避免数据丢失或系统损坏,请确保在升级前备份重要文件和设置,并始终遵循系统提示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值