Flatpak包管理使用
# 编辑配置文件,进行开启即可
# /etc/nixos/configuration.nix
services.flatpak.enable = true;
# rebuild一下
sudo nixos-rebuild switch
flathub源
sudo flatpak remotes --columns=name,url
# 官方源
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# 实际的官方地址是:
sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
# 变更源国内地址, 默认是: https://dl.flathub.org/repo/ 不验证gpg,--no-gpg-verify
sudo flatpak remotes --columns=name,url
curl https://flathub.2011101.xyz/repo/flathub.flatpakrepo
sudo flatpak remote-modify flathub --url=https://flathub.2011101.xyz/repo --no-gpg-verify
sudo flatpak remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub --no-gpg-verify
# 添加gpg验证
sudo flatpak remote-modify flathub --gpg-verify
sudo flatpak remotes
# 导入flathub的gpg
wget https://mirror.sjtu.edu.cn/flathub/flathub.gpg
sudo flatpak remote-modify --gpg-import=flathub.gpg flathub
# 使用自己的服务器进行代理flathub,需要代理软件支持http2,caddy2测试不支持
server {
listen 443 ssl;
server_name dl.leng2011.icu;
ssl_certificate /etc/nginx/conf.d/dl.leng2011.icu_bundle.crt;
ssl_certificate_key /etc/nginx/conf.d/dl.leng2011.icu.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location /repo/flathub.flatpakrepo {
proxy_pass http://127.0.0.1:3312;
}
location / {
proxy_pass https://dl.flathub.org;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host "dl.flathub.org";
}
}
server {
# 创建文件: /home/jcleng/repo/flathub.flatpakrepo 替换Url
listen 3312;
root /home/jcleng/;
}
# 如果修改之后提示: Error: 无法从不信任的无 GPG 校验的远程仓库提取
# 全部使用sudo来操作
sudo flatpak remotes --columns=name,url
# 名称 网址
# flathub https://flathub.2011101.xyz/repo
# 测试
curl https://flathub.2011101.xyz/repo/flathub.flatpakrepo
# 如果是安装.flatpak格式文件,提示不创建新增源,选择自己的源
# 如果安装软件导致地址还原; 需要编辑 /var/lib/flatpak/repo/config 或者 ~/.local/share/flatpak/repo/config 在 [remote "flathub"] 下面增加:
url-is-set=true
# --verbose输出debug信息
sudo flatpak install --verbose flathub org.gtk.Gtk3theme.Breeze
仓库查看
# 已经配置的仓库
flatpak remotes --columns=name,url
# 删除仓库
flatpak remote-delete flathub
安装软件
# 搜索包,习惯加上--columns参数,方便查看软件的application id,安装的时候需要
flatpak search --columns=name,application,description [key_words]
flatpak search --columns=name,application php
## 搜索包含gba的软件
flatpak search --columns=name,application,description gba
# 直接看remote的列表的软件, 比search快
flatpak remote-ls|grep music
flatpak install com.qq.QQmusic
# 安装,install后面的就是搜索的application id
flatpak install io.mgba.mGBA
# 手动运行已经安装的软件
## 默认安装的软件在菜单里面会直接显示,也可以进行手动启动
# 查看已经安装的软件
flatpak list
# 运行
flatpak run io.mgba.mGBA
# 安装指定版本
flatpak install org.freedesktop.Platform//21.08
flatpak install org.freedesktop.Sdk//21.08
其他
# 查看实际安装的软件
ls $HOME/.var/app/
test build
# 测试构建, 会构建到.flatpak-builder目录
flatpak-builder --user --install --force-clean build-dir org.jcleng.wechat_dev_tool.yml
# 或者
flatpak-builder --user --install --force-clean build-dir manifest.json
# 增加构建缓存
flatpak-builder --repo=repo --disable-rofiles-fuse --install-deps-from=flathub --force-clean --default-branch=master --arch=x86_64 --ccache flatpak_app org.winehq.WineWechat.yml
# 运行
flatpak run org.jcleng.wechat_web_devtools_linux
# 沙盒权限说明
https://docs.flatpak.org/zh_CN/latest/sandbox-permissions-reference.html?
# 使用 org.flatpak.Builder 构建和打包
# 检查yml
flatpak run --command=flatpak-builder-lint org.flatpak.Builder manifest io.github.glaumar.QRookie.yml
# 打包安装
flatpak run org.flatpak.Builder --force-clean --sandbox --user --install --install-deps-from=flathub --ccache --mirror-screenshots-url=https://dl.flathub.org/media/ --repo=repo builddir io.github.glaumar.QRookie.yml
# 检查repo
flatpak run --command=flatpak-builder-lint org.flatpak.Builder repo repo
# 检查.desktop
desktop-file-validate io.github.glaumar.QRookie.desktop
package 正式包
# 打正式包,打到repo里面, 会创建repo文件夹
flatpak-builder --repo=repo --force-clean build-dir manifest.json
# 本地新增leng-repo到repo文件夹
flatpak --user remote-add --no-gpg-verify leng-repo repo
# ╰─$ flatpak remotes
# Name Options
# flathub system
# leng-repo user,no-gpg-verify
# wechat_web_devtools_linux-origin user,no-enumerate,no-gpg-verify
# 正式安装, 提示安装过了,直接卸载之前的安装
# flatpak remove org.jcleng.wechat_web_devtools_linux
# ╰─$ flatpak remotes
# Name Options
# flathub system
# leng-repo user,no-gpg-verify
flatpak --user install leng-repo org.jcleng.wechat_web_devtools_linux
# ╰─$ flatpak info org.jcleng.wechat_web_devtools_linux
# ID: org.jcleng.wechat_web_devtools_linux
# Ref: app/org.jcleng.wechat_web_devtools_linux/x86_64/master
# Arch: x86_64
# Branch: master
# Origin: leng-repo
# Collection:
# Installation: user
# Installed: 1.5 GB
# Runtime: org.freedesktop.Platform/x86_64/21.08
# Sdk: org.freedesktop.Sdk/x86_64/21.08
# Commit: 5f86af715551d103ac9eadcb220e54d885309ed59f7590cacc4059537a89f3b9
# Subject: Export org.jcleng.wechat_web_devtools_linux
# Date: 2022-08-29 14:21:32 +0000
# 如果不需要了,卸载
flatpak remote-delete leng-repo
# The following refs are installed from remote 'leng-repo':
# 1) app/org.jcleng.wechat_web_devtools_linux/x86_64/master
# Remove them? [y/n]:
打包.flatpak文件
# repo是已经构建出来的文件夹
flatpak build-bundle repo wechat_web_devtools_linux.flatpak org.jcleng.wechat_web_devtools_linux
# 打出来也不大
ls -lah ./wechat_web_devtools_linux.flatpak
# -rw-r--r-- 1 jcleng users 229M 8月 29 22:39 ./wechat_web_devtools_linux.flatpak
# 从已经安装的本地进行打包离线文件
ls /var/lib/flatpak/repo/refs/heads/deploy/app/io.mgba.mGBA/x86_64/stable
flatpak build-bundle /var/lib/flatpak/repo gba.flatpak io.mgba.mGBA stable
ls -lah gba.flatpak
# .rw-r--r-- jcleng users 2.8 MB Fri May 12 14:43:22 2023 gba.flatpak
# 导出--user安装的包
ls ~/.local/share/flatpak/repo/refs/heads/deploy/app/cn.apipost.apipost7/x86_64/master
flatpak build-bundle ~/.local/share/flatpak/repo cn.apipost.apipost7.master.flatpak cn.apipost.apipost7 master
# 导出runtime运行时
# ls /var/lib/flatpak/repo/refs/heads/deploy/runtime/org.freedesktop.Sdk/x86_64/22.08
flatpak build-bundle --runtime /var/lib/flatpak/repo org.freedesktop.Sdk.flatpak org.freedesktop.Sdk 22.08
ls -lah org.freedesktop.Sdk.flatpak
# .rw-r--r-- jcleng users 351 MB Fri May 12 16:54:05 2023 org.freedesktop.Sdk.flatpak
离线安装技巧
# 先下载依赖,然后直接--no-deps进行安装就不会再去加载.flatpakrepo远程依赖, 前提是知道.flatpak文件的依赖文件
flatpak install --no-deps ./wiliwili-Linux-x86_64.flatpak
分发自己的软件到仓库
创建.flatpakrepo仓库说明文件
# 比如叫 hub-leng.flatpakrepo
# 最重要的Url路径就是构建软件的repo文件夹
[Flatpak Repo]
Title=Flathub
Url=http://flathub-jcleng.test.upcdn.net/flathub-jcleng
Homepage=https://flathub-jcleng.test.upcdn.net/
Comment=jclengs flathub
Description=jclengs flathub
构建包
# 会生成flathub-jcleng文件夹,就是repo的文件夹
flatpak-builder --repo=flathub-jcleng --force-clean build-dir manifest.json
# sourcesdir常规配置:https://docs.flatpak.org/zh_CN/latest/flatpak-builder-command-reference.html#flatpak-manifest
"sources" : [
{
"type" : "dir",
"path" : "./",
"skip" : ".flatpak-builder"
}
]
# 打patch;先commit再-1
git format-patch 243634a98a2913d09fda88c463c6861c412aaf07 -1
{
"type": "patch",
"path": "0001-int.patch"
}
同步到云
# 把 hub-leng.flatpakrepo 文件和flathub-jcleng目录全量同步到云存储,测试用[又拍云]upx
# 打包指定repo文件夹
flatpak-builder --repo=/root/wind/flathub-jcleng --force-clean build-dir manifest_dev.json
# 先进入线上的目录
upx mkdir flathub-jcleng
upx cd flathub-jcleng
# 确认到文件夹了
upx pwd
# /flathub-jcleng/
# 增量同步
upx sync flathub-jcleng
安装存储库的软件
# 因为没有添加gpg密钥,所以--no-gpg-verify
# hub-leng.flatpakrepo文件的路径就是刚刚上传到云存储的文件路径
# flathub-jcleng repo是一个别名
flatpak remote-add --no-gpg-verify --if-not-exists flathub-jcleng http://flathub-jcleng.test.upcdn.net/hub-leng.flatpakrepo
# 安装,用别名指定repo仓库
flatpak install flathub-jcleng io.mgba.mGBA
# 构建其他的项目只要--repo同一个repo文件夹即可
flatpak-builder --repo=flathub-jcleng --force-clean build-dir org.flatpak.Hello.yml
## 然后增量更新到云存储
upx sync flathub-jcleng
## 就可以安装其他的软件了
flatpak install flathub-jcleng org.flatpak.Hello

管理共享外部磁盘/权限管理等 Flatseal
# 比如steam使用游戏盘的数据
flatpak install flathub com.github.tchx84.Flatseal
# 选择第一个[全部应用程序]->[FileSystem]
# ro=只读,rw=可读可写
/home/jcleng/sdb2:rw
github action 构建.flatpak文件flatpak/flatpak-github-actions
# 会生成com.blackmagic.Resolve.flatpak文件
# 提示Error: request to .... failed, reason: read ECONNRESET
# 需要重新生成Releases name: https://github.com/softprops/action-gh-release/issues/187
name: RUN BUILD
jobs:
flatpak:
name: "Flatpak"
runs-on: ubuntu-latest
container:
image: bilelmoussaoui/flatpak-github-actions:freedesktop-22.08
options: --privileged
steps:
- name: Clone Source
run: |
git clone --depth=1 https://github.com/pobthebuilder/resolve-flatpak.git blackmagic --recursive
- name: flatpak action
uses: flatpak/flatpak-github-actions/flatpak-builder@v4
with:
bundle: com.blackmagic.Resolve.flatpak
manifest-path: blackmagic/com.blackmagic.Resolve.yaml
cache-key: flatpak-builder1811
两种游戏wine兼容层, 手动安装
flatpak测试不支持兼容层手柄支持
# 关于兼容层的说明: https://www.reddit.com/r/linux_gaming/comments/uzrz2k/a_thread_about_using_protonge_and_winege_builds/
仅将 Proton-GE 用于 Steam 内的 Steam 游戏;
仅将 Wine-GE 用于非 Steam 游戏;
# steam客户端,flatpak兼容层的位置: ~/.var/app/com.valvesoftware.Steam/data/Steam/compatibilitytools.d/
flatpak install flathub com.valvesoftware.Steam
# epic 客户端, flatpak兼容层的位置: ~/.var/app/com.heroicgameslauncher.hgl/config/heroic/tools/wine
flatpak install flathub com.heroicgameslauncher.hgl
# Lutris客户端, 需要git连接
# flatpak install flathub org.gnome.Platform.Compat.i386 org.freedesktop.Platform.GL32.default org.freedesktop.Platform.GL.default
flatpak install flathub net.lutris.Lutris
# 安装提示github下载慢可以直接下载文件然后解压,然后设置wine,选择对应的[lutris-GE-Proton8-26-x86_64]名称
/home/jcleng/.var/app/net.lutris.Lutris/data/lutris/runners/wine/lutris-GE-Proton8-26-x86_64/
├── bin
├── lib
├── lib64
└── share
# 运行时 [Runtime updates] 里面进行更新, 或者手动更新
# dxvk/vkd3d 目录和文件都在runtime里面, 包含很多: https://github.com/TheCodeTherapy/OryxDotFiles/tree/e9f2c4d070e36243afd4e6abccb83be6abbffde5/lutris/runtime
# https://github.com/doitsujin/dxvk/releases/tag/v2.3.1
# 源码
# https://github.com/lutris/lutris/blob/50ee3af168b5363c1ad6f9bee4892a9673c28219/lutris/util/wine/dxvk.py
tree -L 1 /home/jcleng/.var/app/net.lutris.Lutris/data/lutris/runtime/
/home/jcleng/.var/app/net.lutris.Lutris/data/lutris/runtime/
├── battleye_runtime
├── d3d_extras
├── dgvoodoo2
├── dxvk
├── dxvk-cache-tool
├── dxvk-nvapi
├── eac_runtime
├── gamecontrollerdb
├── icons
├── innoextract-1.9-linux
├── network-tools
├── p7zip
├── Ubuntu-18.04-i686
├── Ubuntu-18.04-x86_64
├── vkd3d
└── winetricks
# wine兼容层管理软件ProtonUp-Qt,通过查看软件里面的地址,可以手动下载兼容层包,下载之后解压到对应目录即可
# https://github.com/DavidoTek/ProtonUp-Qt
flatpak install flathub net.davidotek.pupgui2
# 运行的时候加上代理环境变量,不然重github很难下载
# https://manpages.debian.org/unstable/flatpak/flatpak-run.1.en.html
flatpak run net.davidotek.pupgui2 --env=http_proxy=socks5://13.229.205.20:7890 --env=https_proxy=socks5://13.229.205.20:7890
# 从flathub安装一个兼容层
flatpak install com.valvesoftware.Steam.CompatibilityTool.Proton-GE
# 手动安装
steam https://github.com/luxtorpeda-dev/luxtorpeda#installation-using-tarball
tree
# .
# └── luxtorpeda
# ├── compatibilitytool.vdf
# ├── config.json
# ├── libluxtorpeda.so
# ├── LICENSE
# ├── luxtorpeda.pck
# ├── luxtorpeda.sh
# ├── luxtorpeda.x86_64
# ├── README.md
# ├── toolmanifest.vdf
# └── version
# 1 directory, 10 files
steam https://github.com/GloriousEggroll/proton-ge-custom
ls GE-Proton7-51
# protonfixes
# files
# version
# user_settings.sample.py
# toolmanifest.vdf
# proton_3.7_tracked_files
# proton
# PATENTS.AV1
# LICENSE.OFL
# LICENSE
# filelock.py
# compatibilitytool.vdf
lutris https://github.com/GloriousEggroll/wine-ge-custom
ls lutris-GE-diablo_4_beta-x86_64
# share
# lib64
# lib
# bin
heroicgameslauncher 以上两种都兼容
ls ~/.var/app/com.heroicgameslauncher.hgl/config/heroic/tools
# proton就是proton-ge-custom
# wine就是wine-ge-custom
wine目录: wine-lutris-GE-Proton7-39-x86_64.tar.xz 解压之后
tree -L 2 wine
# wine
# └── Wine-GE-Proton7-39
# ├── bin
# ├── lib
# ├── lib64
# └── share
# 5 directories, 0 files
# steam使用右键游戏,强制使用兼容程序,选择即可
调试相关
# 查看变量环境等
flatpak info -M com.valvesoftware.Steam
错误
# Failed to register: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: org.freedesktop.DBus.Error.ServiceUnknown
# 系统总线权限没有开
摇杆测试
flatpak install flathub io.gitlab.jstest_gtk.jstest_gtk
其他软件: https://fedoraproject.org/wiki/Flatpak:Easy
软件回滚
flatpak remote-info --log flathub io.gitlab.jstest_gtk.jstest_gtk
# 显示运行时, 然后选择自己的运行时进行安装
flatpak remote-info flathub --log --show-runtime -c com.visualstudio.code
# 或者
flatpak history --columns=application,commit,old-commit|grep io.gitlab.jstest_gtk.jstest_gtk
# 更新版本
flatpak update io.dbeaver.DBeaverCommunity
# 指定commit,指定版本
flatpak update --commit=ec07ad6c54e803d1428e5580426a41315e50a14376af033458e7a65bfb2b64f0 io.gitlab.jstest_gtk.jstest_gtk
flatpak update --commit=f35aedd230a9 io.gitlab.jstest_gtk.jstest_gtk
# ! 线上的历史记录
flatpak remote-info --log flathub io.dbeaver.DBeaverCommunity
flatpak update --commit=dfc976240bed16305f5f258d83605c8f3960f82fa5366817a6bc24017b171dec io.dbeaver.DBeaverCommunity
vscode
# 说明文件
/app/share/vscode/flatpak-warning.txt
# 提示使用flatpak-spawn对执行的命令进行代理一遍,就可以执行flatpak实体机的命令了
{
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.profiles.linux": {
"bash": {
"path": "/usr/bin/flatpak-spawn",
"args": ["--host", "--env=TERM=xterm-256color", "bash"]
}
}
}
flatpak-spawn --host docker ps
# 也提供了环境依赖
flatpak search --columns=name,application,version org.freedesktop.Sdk.Extension
flatpak install org.freedesktop.Sdk.Extension.php74 -y
flatpak install org.freedesktop.Sdk.Extension.openjdk17 -y
flatpak install flathub org.freedesktop.Sdk.Extension.golang -y
# 设置变量环境 FLATPAK_ENABLE_SDK_EXT
FLATPAK_ENABLE_SDK_EXT=php74 flatpak run com.visualstudio.code
FLATPAK_ENABLE_SDK_EXT=php74,golang flatpak run com.visualstudio.code
# 或者使用 override;Flatseal
flatpak override --user --env=FLATPAK_ENABLE_SDK_EXT=openjdk17 com.jetbrains.IntelliJ-IDEA-Community
# ls /usr/lib/sdk/openjdk17/
# https://github.com/flathub/com.visualstudio.code/issues/344
# 或者使用内置的bash
"terminal.integrated.shell.linux": "/usr/bin/bash",
# 字体 fontFamily
JetBrainsMono Nerd Font,"思源黑体 HW"
echo $PATH
# 使用宿主机器的命令
#!/usr/bin/sh
export DOCKER_HOST=tcp://127.0.0.1:39012
/usr/bin/flatpak-spawn --host docker "$@"
常用命令: 进入sandbox
# --command 参数,进入之后对容器数据进行修改
flatpak run --command=sh org.ppsspp.PPSSPP
# 详情,和依赖的sdk
flatpak info org.gimp.GIMP
# gnome/freedesktop 鼠标非常小
# freedesktop 需要挂载目录
/home/jcleng/.icons/:rw
/home/jcleng/.local/share/fonts/:rw
字体
# 跟宿主机器样的路径
fc-list
ls ~/.local/share/fonts/
# windows字体, 会导致火狐字体不好看
cd ~/.local/share/fonts/
git clone --depth=1 https://github.com/zhyounger/FontsFromWindows
fc-cache -v|grep FontsFromWindows
关于sock控制软件
# 有的软件使用sock,需要权限才能使用sock
# 比如: com.github.sdv43.whaler/io.podman_desktop.PodmanDesktop
sudo chmod 777 /var/run/docker.sock
GNOME/KDE软件包
# https://wiki.gnome.org/Apps/Nightly
flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
flatpak remote-ls --app gnome-nightly
flatpak install gnome-nightly org.gtk.gtk4.NodeEditor
flatpak remote-add --if-not-exists kdeapps --from https://distribute.kde.org/kdeapps.flatpakrepo
flatpak remote-ls --app kdeapps
其他技巧
在vnc运行flatpak提示错误:
(cobalt:2): cobalt-WARNING **: 13:33:04.933: Failed to get expose-pids state: Failed to get portal proxy: 执行子进程“dbus-launch”失败(没有那个文件或目录)
[2 zypak-helper] Failed to connect to session bus: [org.freedesktop.DBus.Error.NotSupported] Using X11 for dbus-daemon autolaunch was disabled at compile time, set your DBUS_SESSION_BUS_ADDRESS instead
[2 zypak-helper] src/helper/main.cc:40(DetermineZygoteStrategy): Assertion failed: bus
# 运行
export $(dbus-launch)
# Firefox识别触摸屏上的多点触摸,设置环境变量
MOZ_USE_XINPUT2=1
国人开发的游戏助手,安装常用软件
sudo flatpak install flathub org.gnome.Platform.Compat.i386//42 org.freedesktop.Platform.GL32.default//21.08 org.freedesktop.Platform.GL.default//21.08 org.freedesktop.Platform.VulkanLayer.MangoHud//21.08 com.valvesoftware.Steam.Utility.gamescope
sudo flatpak remote-add --if-not-exists winegame https://file.winegame.net/flatpak/repo/winegame.flatpakrepo
sudo flatpak install winegame net.winegame.client -y
# 软件列表
https://winegame.net/games?genres=26
# 微信
https://winegame.net/games/wechat/
使用流播放电脑的音频
flatpak install flathub de.haeckerfelix.AudioSharing
# 手机端的客户端可以使用vlc,rtsp协议
增加桌面图标目录到系统,增加 XDG_DATA_DIRS
environment.extraInit="
export XDG_DATA_DIRS=$XDG_DATA_DIRS:/var/lib/flatpak/exports/share/
export DOCKER_HOST=tcp://0.0.0.0:39012
";
关于vscode设置shell
// 设置默认的shell, 第一个视乎优先级高些
"terminal.integrated.shell.linux": "/usr/bin/sh",
"terminal.integrated.profiles.linux": {
"bash": {
"path": "/run/current-system/sw/bin/bash",
"icon": "terminal-bash"
},
"zsh": {
"path": "zsh"
},
"fish": {
"path": "fish"
},
"tmux": {
"path": "tmux",
"icon": "terminal-tmux"
},
"pwsh": {
"path": "pwsh",
"icon": "terminal-powershell"
}
},
"terminal.integrated.defaultProfile.linux": "zsh",
定义alias常用命令
# 我的配置
if [ "$container" != "flatpak" ];then
alias code=com.visualstudio.code
fi
dpi,freedesktop.Sdk和org.gnome.Sdk适用
# 使用freedesktop可以通过关于GTK 3高分屏: https://wiki.archlinux.org/title/HiDPI
# https://horstmann.com/unblog/2023-01-07/index.html
# 实际是配置的 ~/.Xresources 的 Xft.dpi: 96
# gtk2/3
flatpak override --user --env=GDK_SCALE=2
flatpak override --user --env=GDK_DPI_SCALE=0.5
# 可以尝试gnome应用里面设置
# gsettings set org.gnome.desktop.interface scaling-factor $GDK_SCALE
# gsettings set org.gnome.desktop.interface text-scaling-factor $GDK_DPI_SCALE
# GTK4有bug GDK_DPI_SCALE 不生效
gc
flatpak uninstall --unused
构建技巧
在sources使用 "type": "extra-data", 的时候需要 使用一个脚本来执行 "type": "script", 且在build-commands 要 "install -D apply_extra -t /app/bin", 才能生效; 会安装到 /app/extra/ 文件夹
{
"name": "desktop",
"builddir": true,
"buildsystem": "simple",
"build-commands": [
"install -D apply_extra -t /app/bin",
"install -Dm755 run.sh /app/bin/run.sh",
"install -Dm644 com.hostbuf.FinalShell.metainfo.xml -t $FLATPAK_DEST/share/metainfo",
"install -Dm644 com.hostbuf.FinalShell.desktop /app/share/applications/com.hostbuf.FinalShell.desktop",
"install -Dm644 com.hostbuf.FinalShell.png /app/share/icons/hicolor/scalable/apps/com.hostbuf.FinalShell.png",
"install -Dm644 com.hostbuf.FinalShell.png /app/share/icons/hicolor/512x512/apps/com.hostbuf.FinalShell.png"
],
"sources": [
{
"type": "dir",
"path": "./",
"skip": ".flatpak-builder"
},
{
"type": "script",
"dest-filename": "apply_extra",
"commands": [
"unzip finalshell_linux.zip",
"ls",
"chmod +x ./FinalShell/bin/FinalShell",
"rm -rf finalshell_linux.zip"
]
},
{
"type": "extra-data",
"filename": "finalshell_linux.zip",
"url": "http://dl.hostbuf.com/finalshell2/finalshell_linux.zip",
"sha256": "ed56b988cc179d3a662cd92f0cec6128e91b062b8c892bdd8bb8a483e79c5aea",
"size": 101653303
}
]
}
配置文件位置
cat $HOME/.local/share/flatpak/overrides/global
[Context]
filesystems=/home/jcleng/.Xresources:rw;~/.local/share/fonts:ro;~/.icons:ro;/home/jcleng/.icons;/home/jcleng/.themes
[Environment]
GTK_THEME=Fluent-Light
GTK_IM_MODULE=fcitx
GDK_DPI_SCALE=0.5
GLFW_IM_MODULE=ibus
SDL_IM_MODULE=fcitx
GDK_SCALE=2
XMODIFIERS=@im=fcitx
QT_IM_MODULE=fcitx
DOCKER_HOST=tcp://0.0.0.0:39012
中文兼容性
--filesystem="xdg-config/fontconfig:ro"
# 然后新增 font.conf
~/.config/fontconfig/font.conf
构建技巧
# https://docs.flatpak.org/en/latest/manifests.html#finishing
# 兼容wayland并支持回退x11
finish-args:
# X11 + XShm access
- --share=ipc
- --socket=fallback-x11
# Wayland access
- --socket=wayland
# 仅仅支持x11不支持wayland
finish-args:
# X11 + XShm access
- --share=ipc
- --socket=x11
使用wine
# 使用org.winehq.Wine
# 安装dotnet4
winetricks -1 dotnet48
使用proton并启动进程管理器运行其他软件
/home/jcleng/.var/app/com.valvesoftware.Steam/data/Steam/compatibilitytools.d/GE-Proton10-4/
/home/jcleng/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/common/Proton 9.0 (Beta)/
# 每个游戏的兼容位置,可以直接删除,开始游戏的会重新生成
/home/jcleng/.var/app/com.valvesoftware.Steam/data/Steam/steamapps/compatdata/
# 着色器文件
/home/jcleng/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/shadercache/
# 删除存档
/home/jcleng/.var/app/com.valvesoftware.Steam/data/Steam/steamapps/compatdata/2358720/pfx/drive_c/users/steamuser/AppData/Local/b1/
# 编辑proton文件
# 在sys.argv[1] == "waitforexitandrun":代码的rc = g_session.run()之前添加
if os.environ.get("WINE_TASKMGR", "0") == "1":
subprocess.Popen([g_proton.wine_bin, g_compatdata.prefix_dir + "/drive_c/windows/syswow64/taskmgr.exe"])
# 完整代码
elif sys.argv[1] == "waitforexitandrun":
#wait for wineserver to shut down
g_session.run_proc([g_proton.wineserver_bin, "-w"])
#then run
if os.environ.get("WINE_TASKMGR", "0") == "1":
subprocess.Popen([g_proton.wine_bin, g_compatdata.prefix_dir + "/drive_c/windows/syswow64/taskmgr.exe"], env=g_session.env)
rc = g_session.run()
黑神话重置
# 整个删除
/home/jcleng/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/common/BlackMythWukong/b1/Saved/SaveGames/76561198347326595