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后,画面的传输质量也更好了。
赞赏微信赞赏支付宝赞赏
发表评论