gdk_window_get_state: assertion ‘GDK_IS_WINDOW (window)’ failed 报错解决

gdk_window_get_state: assertion ‘GDK_IS_WINDOW (window)’ failed 报错解决

使用VNC远程连接Linux,运行局域网传输工具localsend报错如下:

└─# localsend_app 

(localsend_app:4185182): Gdk-CRITICAL **: 15:20:28.434: gdk_window_get_state: assertion 'GDK_IS_WINDOW (window)' failed

** (localsend_app:4185182): WARNING **: 15:20:28.450: Failed to start Flutter renderer: 没有可用的 GL 实现


这个错误信息表明localsend_app在尝试启动Flutter渲染器时,没有可用的OpenGL(GL)实现而失败了。因为标准的VNC服务器并不支持OpenGL图形加速,而Flutter应用依赖于OpenGL进行渲染。

解决方案

Linux默认安装的vnc都是tightVNC(本身不支持GL渲染),所以需要将其更换为支持OpenGL的vnc,比如TurboVNC。

卸载默认的vnc(可选)

apt remove --purge tightvncserver

可以选择卸载或者是同时保留不同的vncserver,最后替换配置文件中vnc路径即可。

安装TurboVNC

直接从官方网站下载能获取到最新版本TurboVNC。

https://sourceforge.net/projects/turbovnc/files/

选择对应的包下载安装。

dpkg -i turbovnc_3.1_amd64.deb 

安装完成后turbovnc默认的路径为:

/opt/TurboVNC/bin/vncserver

修改配置文件,替换原本的vncserver路径。

# cat /etc/systemd/system/vncserver@.service
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target
[Service]
Type=forking
User=root
Group=root
WorkingDirectory=/root
PIDFile=/root/.vnc/%H:%i.pid
ExecStartPre=-/bin/rm -f /tmp/.X11-unix/X%i /tmp/.X%i-lock
ExecStart=/opt/TurboVNC/bin/vncserver -depth 32  -geometry 2560x1440 :%i
ExecStop=/opt/TurboVNC/bin/vncserver -kill :%i
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target

修改了服务文件,需要重新加载并启动服务。

sudo systemctl daemon-reload
sudo systemctl restart vncserver@1
sudo systemctl status vncserver@1

就表明turbovnc运行成功了。

安装OpenGL库

apt install libgl1-mesa-dev

使用 glxgears 测试

apt install mesa-utils

glxgears 是一个简单的3D动画程序,包含在mesa-utils包中。运行glxgears可以快速检查系统是否能运行OpenGL程序。

如果看到一个窗口出现,并且有齿轮在转动,这意味着OpenGL正在正常工作。

重新运行flutter程序也就不会出现报错了。

而且替换为turbovnc后,画面的传输质量也更好了。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

发表评论