[有副作用] 如何让wine软件发送、接受多播(组播)包、广播包、ping包,或者监听低于1024的端口

@Ta 2020-12-17发布,2020-12-18修改 5818点击

方案1:使用root权限启动Wine游戏助手

简单粗暴的方法是直接用root权限运行wine游戏助手,理论上可以解决所有权限问题。

在终端执行以下命令:

sudo /opt/apps/net.winegame.client/files/bin/winegame

会提示不建议以root身份运行,忽略即可,不会有什么问题的。

然后你需要重新安装游戏,因为root的游戏和wine存储在/root文件夹,和当前用户(/home/用户名)不在一起。

此外如果你要手动安装游戏,记得重新下载想要的wine版本。在root权限看不到普通用户下载的wine版本。

方案2:使用下面的方案会导致依赖LD_LIBRARY_PATH环境变量的功能(比如“Lutris运行时库”)失效,并导致低版本的wine(比如lutris-5.7.*系列)无法启动!

在Linux上执行以下操作需要特殊权限:

操作 所需权限
监听低于1024的端口 CAP_NET_BIND_SERVICE
发送、接收广播包、组播包 CAP_NET_ADMIN, CAP_NET_BROADCAST
发送、接收ping包 CAP_NET_RAW

如果通过wine游戏助手安装的软件需要使用上述功能,必须使用setcap命令为wine-preloader或者wine64-preloader命令授权,在终端执行以下命令即可:

sudo setcap 'CAP_NET_ADMIN,CAP_NET_BIND_SERVICE,CAP_NET_BROADCAST,CAP_NET_RAW+epi' ~/.local/share/net.winegame.client/runners/wine/想授权的wine版本/bin/wine64-preloader

如:

sudo setcap 'CAP_NET_ADMIN,CAP_NET_BIND_SERVICE,CAP_NET_BROADCAST,CAP_NET_RAW+epi' ~/.local/share/net.winegame.client/runners/wine/lutris-6.0-rc1-x86_64/bin/wine64-preloader

注意,该方案具有以下副作用:

  • 通过setcap授权后传递给wine的环境变量LD_LIBRARY_PATH会被删除,所以依赖LD_LIBRARY_PATH环境变量的功能(比如“Lutris运行时库”)失效。不确定有哪些功能会受到影响。
  • 如果给旧版本wine(如lutris-5.7.*系列)授权,你将根本无法使用该wine版本启动任何程序,只会得到如下错误:
     error while loading shared libraries: libwine.so.1: cannot open shared object file: No such file or directory

所以请不要给低版本wine授权。如果已授权,可以使用以下命令取消:

sudo setcap -r ~/.local/share/net.winegame.client/runners/wine/想取消授权的wine版本/bin/wine64-preloader

如:

sudo setcap -r ~/.local/share/net.winegame.client/runners/wine/lutris-6.0-rc1-x86_64/bin/wine64-preloader

如果你已给多个wine版本授权,可以用以下命令批量取消:

getcap -r ~/.local/share/net.winegame.client/runners/wine | awk -F' =' '{print $1}' | while read f; do sudo setcap -r "$f"; echo "$f"; getcap "$f"; done

参考资料:

回复列表(0|隐藏机器人聊天)
帖子没有回复
添加新回复
回复需要登录