本节教程描述如何在 Linux 发行版上安装 Gtk4。
有三种方式安装 Gtk4:
- 使用 Linux 自带的包管理系统安装,例如 apt
- 从源文件编译安装
- 使用 gnome-boxes 安装 Gnome 40
这是最简单的安装方式,也是推荐的安装方式。我已经在 Ubuntu 21.04 上安装了 Gtk4。
输入如下命令进行安装:
$ sudo apt-get install libgtk-4-bin libgtk-4-common libgtk-4-dev libgtk-4-doc
Fedora, Arch, Debian 和 OpenSUSE 等也可以使用对应的包管理器进行安装,请参考 Installing GTK from packages。
以下表格列出了本身就支持 Gtk4 的发行版:
发行版 | 版本 | Gtk4 | Gnome40 |
---|---|---|---|
Fedora | 35 | 4.4.2 | Gnome41 |
Ubuntu | 21.10 | 4.4 | Gnome40 (40.4.0) |
Debian | bookworm(testing) | 4.6.2 | Gnome40 (40.4) |
Arch | rolling release | 4.6.3 | Gnome42 |
OpenSUSE | Tumbleweed(rolling release) | 4.6.2 | Gnome42 |
如果你已经通过此方法安装了 Gtk4,那么无需再阅读下面的内容。
如果你的操作系统没有预编译的 Gtk4 安装包,那么你可能需要编译源码来安装。另外如果想使用最新版的 Gtk4 也需编译源码安装。
我在2021年1月使用源码安装了 Gtk4。因此,以下信息是旧信息,尤其是每个软件的版本可能与目前有些出入。有关最新信息,请参阅 Gtk API Reference, Building GTK。
- Linux操作系统。例如,Ubuntu 20.10 或 20.04LTS。其他发行版可能也没问题。
- gcc、meson、ninja、git、wget等开发包。
- 以下每个软件都需要这些开发包。
我在 $HOME/local
目录下安装了 Gtk4。这是一个私人用户区。
如果要安装在系统区,/opt/gtk4
目录是不错的选择之一。Gtk API Reference, Building GTK 给出了在 /opt/gtk4
目录的安装示例。
不要将它安装到默认的 /usr/local
。很多不是基于 Gtk4 构建的 Ubuntu 应用程序会使用此目录下系统自带的 Gtk 库。因此,安装在默认位置风险很高,很可能会发生不好的事情。
大多数必需的库都包含在 Ubuntu 20.10 中。因此,可以使用 apt-get 命令来安装它们。您不需要从源码安装它们。您可以跳过下面有关依赖库安装(Glib、Pango、Gdk-pixbuf 和 Gtk-doc)的小节。
如果您的 Ubuntu 是 20.04LTS,则需要从源码安装。请检查您的库的版本,如果它低于必要的版本,请从源码安装。
例如,
$ pkg-config --modversion glib-2.0
2.64.6
必要的版本是 2.66.0 或更高版本。 因此,上面的示例表明您需要安装 Glib。我安装了 2.67.1,这是当时(2021年1月)的最新版本。下载 Glib 源文件,然后解压缩并提取文件:
$ wget https://download.gnome.org/sources/glib/2.67/glib-2.67.1.tar.xz
$ tar -Jxf glib-2.67.1.tar.xz
编译 Glib 可能需要额外的一些库,你可以使用 meson 来找到它们:
$ meson --prefix $HOME/local _build
使用 apt-get 来安装这些依赖:
$ sudo apt-get install -y libpcre2-dev libffi-dev
装完依赖库之后即可编译 Glib:
$ rm -rf _build
$ meson --prefix $HOME/local _build
$ ninja -C _build
$ ninja -C _build install
由于后面的安装还需要 Glib,所以我们可以设置一些环境变量,以便后面的编译过程能够找到 Glib,把下面的内容保存为文件 env.sh
:
# compiler
CPPFLAGS="-I$HOME/local/include"
LDFLAGS="-L$HOME/local/lib"
PKG_CONFIG_PATH="$HOME/local/lib/pkgconfig:$HOME/local/lib/x86_64-linux-gnu/pkgconfig"
export CPPFLAGS LDFLAGS PKG_CONFIG_PATH
# linker
LD_LIBRARY_PATH="$HOME/local/lib/x86_64-linux-gnu/"
PATH="$HOME/local/bin:$PATH"
export LD_LIBRARY_PATH PATH
# gsetting
export GSETTINGS_SCHEMA_DIR=$HOME/local/share/glib-2.0/schemas
然后使用 . (dot) 或者 source 命令将这些环境变量导入到当前的bash:
$ . env.sh
或者
$ source env.sh
上面的命令会执行 env.sh
中的命令来更改当前 shell 中的环境变量。
下载后解压:
$ wget https://download.gnome.org/sources/pango/1.48/pango-1.48.0.tar.xz
$ tar -Jxf pango-1.48.0.tar.xz
可以使用 meson 确定依赖库,然后安装所有依赖库,然后编译安装 Pango:
$ meson --prefix $HOME/local _build
$ ninja -C _build
$ ninja -C _build install
上面的命令将 Pango-1.0.gir 安装在 $HOME/local/share/gir-1.0
目录。如果您安装 Pango 时没有指定 --prefix
选项,那么它将位于 /usr/local/share/gir-1.0
。此目录 (/usr/local/share) 由一些应用程序使用。这些应用程序通过环境变量 XDG_DATA_DIRS
找到该目录。它是一个文本文件,保存了“共享”目录的列表,如“/usr/share”、“usr/local/share”等。现在需要将 $HOME/local/share
添加到 XDG_DATA_DIRS
中,否则后面编译会出错。
$ export XDG_DATA_DIRS=$HOME/local/share:$XDG_DATA_DIRS
下载和解压:
$ wget https://download.gnome.org/sources/gdk-pixbuf/2.42/gdk-pixbuf-2.42.2.tar.xz
$ tar -Jxf gdk-pixbuf-2.42.2.tar.xz
$ wget https://download.gnome.org/sources/gtk-doc/1.33/gtk-doc-1.33.1.tar.xz
$ tar -Jxf gtk-doc-1.33.1.tar.xz
和之前一样,安装依赖包,然后编译并安装它们。
Gtk-doc 的安装会将 gtk-doc.pc
放在 $HOME/local/share/pkgconfig
下。该文件由构建工具之一的 pkg-config 使用。该目录需要添加到环境变量PKG_CONFIG_PATH
:
$ export PKG_CONFIG_PATH="$HOME/local/share/pkgconfig:$PKG_CONFIG_PATH"
如果你想安装最新的版本,可以克隆最新的仓库:
$ git clone https://gitlab.gnome.org/GNOME/gtk.git
如果想要安装最新的稳定版本,那么可以从 Gnome source website 下载。目前最新版本是 4.6.3 (2022年5月3日)。
编译安装:
$ meson --prefix $HOME/local _build
$ ninja -C _build
$ ninja -C _build install
更多资料请参考 Gtk4 API Reference, Building GTK。
在你退出登录之后,之前手动设置的临时环境变量会消失,需要重新添加,因此修改 env.sh
:
# compiler
CPPFLAGS="-I$HOME/local/include"
LDFLAGS="-L$HOME/local/lib"
PKG_CONFIG_PATH="$HOME/local/lib/pkgconfig:$HOME/local/lib/x86_64-linux-gnu/pkgconfig:
$HOME/local/share/pkgconfig"
export CPPFLAGS LDFLAGS PKG_CONFIG_PATH
# linker
LD_LIBRARY_PATH="$HOME/local/lib/x86_64-linux-gnu/"
PATH="$HOME/local/bin:$PATH"
export LD_LIBRARY_PATH PATH
# gir
XDG_DATA_DIRS=$HOME/local/share:$XDG_DATA_DIRS
export XDG_DATA_DIRS
# gsetting
export GSETTINGS_SCHEMA_DIR=$HOME/local/share/glib-2.0/schemas
# girepository-1.0
export GI_TYPELIB_PATH=$HOME/local/lib/x86_64-linux-gnu/girepository-1.0
在安装 Gtk4 库之前,使用 . (dot) 或 source 命令运行。
您可能认为可以将它们添加到您的 .profile
中。但这是一个错误的决定。永远不要将它们写入您的.profile
。只有在编译和运行 Gtk4 应用程序时才需要上述环境变量,否则没有必要。如果您更改了上述环境变量并运行 Gtk3 应用程序,可能会导致严重损坏。
编译 Gtk4 程序之前,需要执行上述的 env.sh
导入相关环境变量:
$ . env.sh
之后即可以直接编译。例如要编译 sample.c
,请键入以下内容。
$ gcc `pkg-config --cflags gtk4` sample.c `pkg-config --libs gtk4`
要了解如何编译 Gtk4 应用程序,请参阅第 3 节(GtkApplication 和 GtkApplicationWindow)及之后的部分。
本节的最后一部分关于 Gnome40 和 gnome-boxes。Gnome 40 是 Gnome 桌面系统的新版本。并且 Gtk4 已经预先安装在发行版中。请先查看 Gnome 40 网站 了解更多信息。
但是,编译和运行 Gtk4 应用程序不需要 Gnome40。
目前有六种选择。
- Gnome OS
- Arch Linux
- Fedora 35
- openSUSE Tumbleweed
- Ubuntu 21.10
- Debian bookworm
我已经用 gnome-boxes 安装了 Fedora 34。当时我的操作系统是 Ubuntu 21.04。使用 Gnome-boxes 在 Ubuntu 中创建一个虚拟机,然后将 Fedora 将安装到该虚拟机上。
步骤如下:
-
下载 Fedora 34 iso 文件。Gnome 40 网站 末尾有下载链接。
-
使用 apt-get 命令安装 gnome-boxes。
$ sudo apt-get 安装 gnome-boxes
-
运行 gnome-boxes。
-
点击左上角的
+
按钮并通过点击Create a Virtual Machine ...
启动创建向导。然后出现一个对话框。单击Operationg System Image File
并选择已下载的 iso 文件。 -
然后,执行 Fedora 的安装程序。按照安装程序的说明进行操作。在安装结束时,安装程序会指示重新启动系统。单击标题栏右侧的 并选择重新启动或关闭。
-
之后回到 gnome-boxes 的初始窗口,窗口的左上角有一个
Fedora 34 Workstation
按钮。单击按钮,Fedora 将被执行。 -
之后会出现一个设置对话框。根据向导设置 Fedora。
现在您可以使用 Fedora,它已经包含 Gtk4 库,但是需要安装Gtk4开发包。可以使用 dnf
安装 gtk4.x86_64
包:
$ sudo dnf install gtk4.x86_64
您可以通过编译基于 Gtk4 的源文件来测试 Gtk4 开发包是否安装正确。例如尝试编译将在第 21 节中编写的 tfe
文本编辑器。
-
打开浏览器
-
点击绿色的按钮
Code
-
选在
Download ZIP
以下载源码 -
解压下载的文件
-
进入目录
src/tfe7
. -
编译
$ meson _build bash: meson: command not found... Install package 'meson' to provide command 'meson'? [N/y] y * Waiting in queue... The following packages have to be installed: meson-0.56.2-2.fc34.noarch High productivity build system ninja-build-1.10.2-2.fc34.x86_64 Small build system with a focus on speed vim-filesystem-2:8.2.2787-1.fc34.noarch VIM filesystem layout Proceed with changes? [N/y] y ... ... ... ... The Meson build system Version: 0.56.2 ... ... ... ... Project name: tfe Project version: undefined C compiler for the host machine: cc (gcc 11.0.0 "cc (GCC) 11.0.0 20210210 (Red Hat 11.0.0-0)") C linker for the host machine: cc ld.bfd 2.35.1-38 Host machine cpu family: x86_64 Host machine cpu: x86_64 Found pkg-config: /usr/bin/pkg-config (1.7.3) Run-time dependency gtk4 found: YES 4.2.0 Found pkg-config: /usr/bin/pkg-config (1.7.3) Program glib-compile-resources found: YES (/usr/bin/glib-compile-resources) Program glib-compile-schemas found: YES (/usr/bin/glib-compile-schemas) Program glib-compile-schemas found: YES (/usr/bin/glib-compile-schemas) Build targets in project: 4 Found ninja-1.10.2 at /usr/bin/ninja $ ninja -C _build ninja: Entering directory `_build' [12/12] Linking target tfe $ ninja -C _build install ninja: Entering directory `_build' [0/1] Installing files. Installing tfe to /usr/local/bin Installation failed due to insufficient permissions. Attempting to use polkit to gain elevated privileges... Installing tfe to /usr/local/bin Installing /home/<username>/Gtk4-tutorial-main/src/tfe7/com.github.ToshioCP.tfe.gschema.xml to /usr/local/share/glib-2.0/schemas Running custom install script '/usr/bin/glib-compile-schemas /usr/local/share/glib-2.0/schemas/'
-
执行
$ tfe
之后 tfe
文本编辑器会显示出来。说明编译和执行已经成功了。