從源碼修改ubuntu軟件包的方法

在這裏插入圖片描述
如圖在桌面上右鍵Open Terminal的時候咱們想要打開的是桌面,而事實上ubuntu打開的是home目錄,這個主要的緣由是這個插件/usr/lib/x86_64-linux-gnu/nautilus/extensions-3.0/libterminal-nautilus.so沒有寫好,要解決這個問題,從根本上能夠經過修改源碼 gnome-terminal從新編譯來解決詳見方法。

方法

此方法須要咱們下載源碼,首先進入官方源碼發佈頁 咱們能夠看到三個文件。 linux

在這裏插入圖片描述
這三個文件就是咱們根據源碼編譯最終獲得的結果,咱們須要的文件是nautilus-extension-gnome-terminal,也就是這個 deb安裝包 經過解壓deb包咱們能夠發現,在\usr\lib\x86_64-linux-gnu\nautilus\extensions-3.0\目錄下有一個 libterminal-nautilus.so文件,這個文件決定了 咱們在桌面上打開終端後進入的是home目錄仍是desktop目錄。

在這裏插入圖片描述

下載源碼

往下翻,能夠看到裏面有三個源碼文件,第一個是源碼文件的密鑰文件,咱們暫時不須要,第二個文件是源碼文件的gnome-terminal原始源碼,第三個是針對ubuntu系統的補丁,在gnome-terminal官方源碼的基礎上應用這個補丁,就能在ubuntu上面運行,否則會出bug。所以咱們須要下載的是第2、第三個文件。 git

在這裏插入圖片描述
下載好gnome-terminal_3.28.1.orig.tar.xz文件以後解壓出一個文件夾gnome-terminal-3.28.1,將gnome-terminal_3.28.1-1ubuntu1.debian.tar.xz 裏面debian目錄下的文件覆蓋到以前解壓出的gnome-terminal-3.28.1目錄下,咱們就獲得一個包含src、patches的文件夾。
在這裏插入圖片描述

應用補丁

使用如下命令應用補丁:shell

git apply patches/*.patch
複製代碼

修改源碼

在src目錄中,咱們能夠找到如下代碼片斷ubuntu

case FILE_INFO_DESKTOP://這個說明是在桌面上打開
      if (desktop_is_home_dir (nautilus) || desktop_opens_home_dir (nautilus)) {
      //這個if判斷條件很重要
        path = g_strdup (g_get_home_dir ());
      } else {
        path = g_strdup (g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP));
      }
      break;

複製代碼

這個就是關鍵代碼,其中if判斷條件判斷desktop_is_home_dir (nautilus)和desktop_opens_home_dir (nautilus)這兩個函數是否成立,只要有其中一個成立,咱們就打開home目錄,否則咱們就打開桌面,以後,咱們繼續搜索desktop_is_home_dir (nautilus)和desktop_opens_home_dir (nautilus)這兩個函數, 首先找到desktop_is_home_dir (nautilus)這個函數,bash

static inline gboolean
desktop_is_home_dir (TerminalNautilus *nautilus)
{
  return FALSE;
}
複製代碼

因爲ubuntu默認桌面不是home目錄,因此這個函數返回FALSE。 以後咱們繼續尋找desktop_opens_home_dir (nautilus)這個函數app

static inline gboolean desktop_opens_home_dir (TerminalNautilus *nautilus) {
#if 0
  return  _client_get_bool (gconf_client,
                                "/apps/nautilus-open-terminal/desktop_opens_home_dir",
                                NULL);
#endif
  return TRUE;//這裏要改成FALSE
}
複製代碼

注意這裏返回了TRUE說明在desktop上面打開終端後進入的是home目錄,咱們須要改成FALSE,這樣才能進入Desktop目錄。 修改後咱們獲得如下代碼:ionic

static inline gboolean desktop_opens_home_dir (TerminalNautilus *nautilus) {
#if 0
  return  _client_get_bool (gconf_client,
                                "/apps/nautilus-open-terminal/desktop_opens_home_dir",
                                NULL);
#endif
  return FALSE;
}
複製代碼

這樣代碼就修改完了,順便咱們還能夠看看代碼別的部分,以下兩段代碼分別設置了桌面上右鍵和普通文件夾裏面右鍵顯示的不一樣,其中桌面上是Open Terminal而普通文件夾裏面是Open in Terminal,只相差了一個in。 函數

在這裏插入圖片描述
在這裏插入圖片描述

case FILE_INFO_DESKTOP:
        if (desktop_opens_home_dir (nautilus)) {
          name = _("Open T_erminal");
          tooltip = _("Open a terminal");
        } else {
          name = _("Open in T_erminal");
          tooltip = _("Open the currently open folder in a terminal");
        }
        break;
複製代碼
case FILE_INFO_OTHER:
        name = _("Open in T_erminal");

        if (is_file_item) {
          tooltip = _("Open the currently selected folder in a terminal");
        } else {
          tooltip = _("Open the currently open folder in a terminal");
        }
        break;
複製代碼

安裝依賴

sudo apt install  intltool  libvte-2.91-dev gsettings-desktop-schemas-dev uuid-dev libdconf-dev libpcre2-dev libgconf2-dev libxml2-utils  gnome-shell libnautilus-extension-dev itstool  yelp-tools pcre2-utils
複製代碼

編譯安裝

咱們按照autoreconf->autoconf->configure->make->make install的步驟進行ui

autoreconf --install
autoconf
./configure --prefix='/usr'
make
sudo make install
複製代碼

編譯好以後咱們重啓,以後在桌面上打開終端,看看是否生效。很遺憾個人沒生效,通過仔細檢查,發現緣由是make install 把libterminal-nautilus.so安裝到了/usr/lib/nautilus/extensions-3.0/目錄下,而咱們須要安裝到\usr\lib\x86_64-linux-gnu\nautilus\extensions-3.0\目錄下,所以須要如下命令來複制這個庫文件。spa

cp /usr/lib/nautilus/extensions-3.0/libterminal-nautilus.so \usr\lib\x86_64-linux-gnu\nautilus\extensions-3.0\
複製代碼

複製以後,桌面上右鍵菜單會暫時不可用,但重啓以後就會恢復正常了。 如今咱們在桌面上打開終端,# 方法一

在這裏插入圖片描述
如圖在桌面上右鍵Open Terminal的時候咱們想要打開的是桌面,而事實上ubuntu打開的是home目錄,這個主要的緣由是這個插件/usr/lib/x86_64-linux-gnu/nautilus/extensions-3.0/libterminal-nautilus.so沒有寫好,要解決這個問題,從根本上能夠經過修改源碼 gnome-terminal從新編譯來解決詳見方法二。可是有點麻煩,這裏介紹一個不完美可是比較簡便的方法,就是在~/.bashrc裏面加一行

cd Desktop
複製代碼

這樣也會產生一些新的問題,好比在home目錄下打開終端會跳轉到Desktop,但假如你的我的喜愛和我同樣是在桌面上操做的話,這個就問題不大。

方法二

方法二須要咱們下載源碼,首先進入官方源碼發佈頁 咱們能夠看到三個文件。

在這裏插入圖片描述
這三個文件就是咱們根據源碼編譯最終獲得的結果,咱們須要的文件是nautilus-extension-gnome-terminal,也就是這個 deb安裝包 經過解壓deb包咱們能夠發現,在\usr\lib\x86_64-linux-gnu\nautilus\extensions-3.0\目錄下有一個 libterminal-nautilus.so文件,這個文件決定了 咱們在桌面上打開終端後進入的是home目錄仍是desktop目錄。

在這裏插入圖片描述

下載源碼

往下翻,能夠看到裏面有三個源碼文件,第一個是源碼文件的密鑰文件,咱們暫時不須要,第二個文件是源碼文件的gnome-terminal原始源碼,第三個是針對ubuntu系統的補丁,在gnome-terminal官方源碼的基礎上應用這個補丁,就能在ubuntu上面運行,否則會出bug。所以咱們須要下載的是第2、第三個文件。

在這裏插入圖片描述
下載好gnome-terminal_3.28.1.orig.tar.xz文件以後解壓出一個文件夾gnome-terminal-3.28.1,將gnome-terminal_3.28.1-1ubuntu1.debian.tar.xz 裏面debian目錄下的文件覆蓋到以前解壓出的gnome-terminal-3.28.1目錄下,咱們就獲得一個包含src、patches的文件夾。
在這裏插入圖片描述

應用補丁

使用如下命令應用補丁:

git apply patches/*.patch
複製代碼

修改源碼

在src目錄中,咱們能夠找到如下代碼片斷

case FILE_INFO_DESKTOP://這個說明是在桌面上打開
      if (desktop_is_home_dir (nautilus) || desktop_opens_home_dir (nautilus)) {
      //這個if判斷條件很重要
        path = g_strdup (g_get_home_dir ());
      } else {
        path = g_strdup (g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP));
      }
      break;

複製代碼

這個就是關鍵代碼,其中if判斷條件判斷desktop_is_home_dir (nautilus)和desktop_opens_home_dir (nautilus)這兩個函數是否成立,只要有其中一個成立,咱們就打開home目錄,否則咱們就打開桌面,以後,咱們繼續搜索desktop_is_home_dir (nautilus)和desktop_opens_home_dir (nautilus)這兩個函數, 首先找到desktop_is_home_dir (nautilus)這個函數,

static inline gboolean
desktop_is_home_dir (TerminalNautilus *nautilus)
{
  return FALSE;
}
複製代碼

因爲ubuntu默認桌面不是home目錄,因此這個函數返回FALSE。 以後咱們繼續尋找desktop_opens_home_dir (nautilus)這個函數

static inline gboolean desktop_opens_home_dir (TerminalNautilus *nautilus) {
#if 0
  return  _client_get_bool (gconf_client,
                                "/apps/nautilus-open-terminal/desktop_opens_home_dir",
                                NULL);
#endif
  return TRUE;//這裏要改成FALSE
}
複製代碼

注意這裏返回了TRUE說明在desktop上面打開終端後進入的是home目錄,咱們須要改成FALSE,這樣才能進入Desktop目錄。 修改後咱們獲得如下代碼:

static inline gboolean desktop_opens_home_dir (TerminalNautilus *nautilus) {
#if 0
  return  _client_get_bool (gconf_client,
                                "/apps/nautilus-open-terminal/desktop_opens_home_dir",
                                NULL);
#endif
  return FALSE;
}
複製代碼

這樣代碼就修改完了,順便咱們還能夠看看代碼別的部分,以下兩段代碼分別設置了桌面上右鍵和普通文件夾裏面右鍵顯示的不一樣,其中桌面上是Open Terminal而普通文件夾裏面是Open in Terminal,只相差了一個in。

在這裏插入圖片描述
在這裏插入圖片描述

case FILE_INFO_DESKTOP:
        if (desktop_opens_home_dir (nautilus)) {
          name = _("Open T_erminal");
          tooltip = _("Open a terminal");
        } else {
          name = _("Open in T_erminal");
          tooltip = _("Open the currently open folder in a terminal");
        }
        break;
複製代碼
case FILE_INFO_OTHER:
        name = _("Open in T_erminal");

        if (is_file_item) {
          tooltip = _("Open the currently selected folder in a terminal");
        } else {
          tooltip = _("Open the currently open folder in a terminal");
        }
        break;
複製代碼

安裝依賴

sudo apt install  intltool  libvte-2.91-dev gsettings-desktop-schemas-dev uuid-dev libdconf-dev libpcre2-dev libgconf2-dev libxml2-utils  gnome-shell libnautilus-extension-dev itstool  yelp-tools pcre2-utils
複製代碼

編譯安裝

咱們按照autoreconf->autoconf->configure->make->make install的步驟進行

autoreconf --install
autoconf
./configure --prefix='/usr'
make
sudo make install
複製代碼

編譯好以後咱們重啓,以後在桌面上打開終端,看看是否生效。很遺憾個人沒生效,通過仔細檢查,發現緣由是make install 把libterminal-nautilus.so安裝到了/usr/lib/nautilus/extensions-3.0/目錄下,而咱們須要安裝到\usr\lib\x86_64-linux-gnu\nautilus\extensions-3.0\目錄下,所以須要如下命令來複制這個庫文件。

cp /usr/lib/nautilus/extensions-3.0/libterminal-nautilus.so \usr\lib\x86_64-linux-gnu\nautilus\extensions-3.0\
複製代碼

複製以後,桌面上右鍵菜單會暫時不可用,但重啓以後就會恢復正常了。 如今咱們在桌面上打開終端,默認進入的就是desktop目錄:

在這裏插入圖片描述
在這裏插入圖片描述
相關文章
相關標籤/搜索