layout: manual language: zh github: https://github.com/defold/doc title: Defold 开发 Linux 游戏 brief: 本教程介绍了如何在 Linux 上编译运行 Defold 游戏 —

Linux 开发

在 Linux 上编译运行 Defold 游戏十分简单.

项目配置

Linux 相关设置位于 game.project 文件的 Linux 部分.

问答

Q: 在 GNOME 上使用 Defold 编辑器在 4k 或 HiDPI 显示器上显得特别小?

A: 启动 Defold 之前修改缩放参数. 参见

$ gsettings set org.gnome.desktop.interface scaling-factor 2
$ ./Defold

A: 另一种办法, 尤其是在你希望把界面放大到非整数倍时, 可以修改 Defold/config 文件, 在vmargs 一行加入 glass.gtk.uiScale: source

vmargs = -Dglass.gtk.uiScale=1.5,-Dfile.encoding=UTF-8,...
vmargs = -Dglass.gtk.uiScale=175%,-Dfile.encoding=UTF-8,...
vmargs = -Dglass.gtk.uiScale=192dpi,-Dfile.encoding=UTF-8,...

此值的意义参见 Arch Linux HiDPI wiki 文章.

Q:在 Elementary OS 上使用 Defold 编辑器, 鼠标点选上的都是后面的东西?

A: 尝试这样启动编辑器:

$ GTK_CSD=0 ./Defold

Q: 在 Defold 编辑器里打开集合或者游戏对象时崩溃报关于 “com.jogamp.opengl” 的错误.

A: 某些Linux版本 (如 Ubuntu 18) 下 Mesa 版所使用的 jogamp/jogl Defold 版本有冲突. 可以在调用 glGetString(GL_VERSION) 是设置MESA_GL_VERSION_OVERRIDE 为2.1或者更高的值以覆盖 GL 默认的驱动版本. 可以使用如下命令查看系统上支持 glxinfo 的最高 OpenGL 版本:

glxinfo | grep version

输出举例 (注意 “OpenGL version string: x.y”):

server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
Max core profile version: 4.6
Max compat profile version: 4.6
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 3.2
OpenGL core profile version string: 4.6 (Core Profile) Mesa 20.2.6
OpenGL core profile shading language version string: 4.60
OpenGL version string: 4.6 (Compatibility Profile) Mesa 20.2.6
OpenGL shading language version string: 4.60
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 20.2.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
GL_EXT_shader_implicit_conversions, GL_EXT_shader_integer_mix,

使用版本 2.1 或者更高的匹配显卡的版本:

$ MESA_GL_VERSION_OVERRIDE=2.1 ./Defold
$ MESA_GL_VERSION_OVERRIDE=4.6 ./Defold

Q: 打开 Defold 时报错 “com.jogamp.opengl.GLException: Graphics configuration failed”?

A: 某些Linux版本 (如 Ubuntu 20.04) 在運行 Defold 時會出現新的 Mesa 驅動程序 (Iris) 的問題. 可以嘗試使用舊版本驅動程序:

$ export MESA_LOADER_DRIVER_OVERRIDE=i965 ./Defold

Q: 在 Defold 编辑器里打开集合或者游戏对象时崩溃报关于 “libffi.so” 的错误.

A: 这是由于Linux系统的 libffi 版本与 Defold (版本 6 或 7) 需要的版本不一致. 确保 libffi.so.6libffi.so.7 已安装在 /usr/lib/x86_64-linux-gnu 路径下. 可以使用如下命令下载 libffi.so.7:

$ wget http://ftp.br.debian.org/debian/pool/main/libf/libffi/libffi7_3.3-6_amd64.deb
$ sudo dpkg -i libffi7_3.3-6_amd64.deb

然后需要在环境变量 LD_PRELOAD 中指定安装路径再启动 Defold:

$ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libffi.so.7 ./Defold

Q: 我的 OpenGL 驱动过期了. 还能用 Defold 吗?

A: 能用, 但是需要打开 Defold 软件渲染. 可以设置环境变量 LIBGL_ALWAYS_SOFTWARE 值为 1:

~/bin/Defold$ LIBGL_ALWAYS_SOFTWARE=1 ./Defold

Q: 在 Linux 上启动 Defold 游戏无效?

A: 看看 Defold 编辑器控制台. 如果有下面这样的输出:

dmengine: error while loading shared libraries: libopenal.so.1: cannot open shared object file: No such file or directory

就需要安装 libopenal1. 不同版本包名不同, 另外某些用户也需要安装 openalopenal-dev 或者 openal-devel 包.

$ apt-get install libopenal-dev

Q: 还没等我选择什么选项菜单栏就关闭了?

A: 这很可能是窗口管理器 (比如 Qtile 或 i3) 造成的. 这是一个 JavaFX 已知问题 解决方法其一, 设置 GDK_DISPLAY 环境变量为 1:¨

$ GDK_DISPLAY=1 ./Defold
D=2

解决方法其二, 修改 Defold/config 文件在 vmargs 行添加 -Djdk.gtk.version=2:

vmargs = -Djdk.gtk.version=2,-Dfile.encoding=UTF-8,...