在 Linux 中,有两个剪切板:
Primary Selection:鼠标选中后可用鼠标中键直接粘贴Clipboard:需要明确的复制/粘贴命令,与 Windows 类似
在 Primary Selection 模式下,数据并不会在被选择时被复制到系统内存里。实际上,是源应用程序声称"我拥有这块数据",直到执行粘贴操作时,目标应用程序才会向源程序请求数据。这意味着,如果你选中文本后关闭了源程序,那么该数据就无法粘贴了,因为源程序已经不存在了。
Primary Selection
Primary Selection 在 GNOME 中,是受到一个开关控制的,通过 gsettings 查询 gtk-enable-primary-paste 的值,发现为 false:
shell
$ gsettings get org.gnome.desktop.interface gtk-enable-primary-paste
false
通过 dconf 读取为空,在 system 和 user 中均没有配置过该 Key:
shell
$ dconf read /org/gnome/desktop/interface/gtk-enable-primary-paste
说明 gtk-enable-primary-paste 使用的是 schema 层面的默认值:
shell
$ cat /usr/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.xml
......
<key name="gtk-enable-primary-paste" type="b">
<default>false</default>
<summary>Enable the primary paste selection</summary>
<description>
If true, gtk+ uses the primary paste selection, usually triggered by a middle mouse button click.
</description>
</key>
......
Ubuntu 26.04 相较于 24.04,修改了 schema 层面的默认值:true ---> false,可以通过 user 层面修改默认值:
shell
$ gsettings set org.gnome.desktop.interface gtk-enable-primary-paste true
dconf
dconf 是 Gnome3 的默认的数据库后端。
- 每个应用有自己的路径,来隔离访问权限
- 图形化配置程序:
dconf-editor - 命令行配置程序:
gsettings,dconf
可以通过 DCONF_PROFILE 环境变量来影响 dconf 读取的数据库与顺序,默认配置是 /etc/dconf/profile/ibus:
shell
$ cat /etc/dconf/profile/ibus
user-db:user
system-db:ibus
- 寻找
~/.config/dconf/下的user文件 - 寻找
/etc/dconf/db/下的ibus文件
可以通过 dconf 来直接读写一个 Key:
shell
### 读
$ dconf read /org/gnome/desktop/interface/gtk-enable-primary-paste
### 写
$ dconf write /org/gnome/desktop/interface/gtk-enable-primary-paste true
### dump 所有
$ dconf dump /
GTK 应用是通过 gsettings 接口来获取配置的,因为还有一些 schema 层面的默认值,而 dconf 对于不存在的 Key 只会返回空:
shell
### 读
$ gsettings get org.gnome.desktop.interface gtk-enable-primary-paste
### 写
$ gsettings set org.gnome.desktop.interface gtk-enable-primary-paste true
schema 架层面的源文件位于 /usr/share/glib-2.0/schemas/ 目录下,所以 gsettings 有三层数据来源:
- user:
~/.config/dconf/ - system:
/etc/dconf/db/ - schema:
/usr/share/glib-2.0/schemas/