操作系统 16.04。banshee
至今每天都在使用,但后来出现了错误。
包含致命日志错误。
[ERROR] FATAL UNHANDLED EXCEPTION: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.MethodAccessException: Method `IBusProxy:.ctor ()' is inaccessible from method `NDesk.DBus.BusObject:.ctor ()'
at (wrapper managed-to-native) System.Object:__icall_wrapper_mono_throw_method_access (intptr,intptr)
at IBusProxy..ctor () [0x00000] in <8f213ad6c6e7479eb4b70a3891c9ae32>:0
at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exception&)
at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) [0x00002] in <f712f98eb8e445c8918edaf595bbe465>:0
--- End of inner exception stack trace ---
at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) [0x00019] in <f712f98eb8e445c8918edaf595bbe465>:0
at System.RuntimeType.CreateInstanceMono (System.Boolean nonPublic) [0x000ca] in <f712f98eb8e445c8918edaf595bbe465>:0
at System.RuntimeType.CreateInstanceSlow (System.Boolean publicOnly, System.Boolean skipCheckThis, System.Boolean fillCache, System.Threading.StackCrawlMark& stackMark) [0x0001a] in <f712f98eb8e445c8918edaf595bbe465>:0
at System.RuntimeType.CreateInstanceDefaultCtor (System.Boolean publicOnly, System.Boolean skipCheckThis, System.Boolean fillCache, System.Threading.StackCrawlMark& stackMark) [0x0002a] in <f712f98eb8e445c8918edaf595bbe465>:0
at System.Activator.CreateInstance (System.Type type, System.Boolean nonPublic) [0x00040] in <f712f98eb8e445c8918edaf595bbe465>:0
at System.Activator.CreateInstance (System.Type type) [0x00000] in <f712f98eb8e445c8918edaf595bbe465>:0
at NDesk.DBus.BusObject.GetObject (NDesk.DBus.Connection conn, System.String bus_name, NDesk.DBus.ObjectPath object_path, System.Type declType) [0x00008] in <6f993bb1a1414adf8517b25c86b39e83>:0
at NDesk.DBus.Connection.GetObject (System.Type type, System.String bus_name, NDesk.DBus.ObjectPath path) [0x0000d] in <6f993bb1a1414adf8517b25c86b39e83>:0
at NDesk.DBus.Connection.GetObject[T] (System.String bus_name, NDesk.DBus.ObjectPath path) [0x00001] in <6f993bb1a1414adf8517b25c86b39e83>:0
at NDesk.DBus.Bus..ctor (System.String address) [0x0000f] in <6f993bb1a1414adf8517b25c86b39e83>:0
at NDesk.DBus.Bus.Open (System.String address) [0x00033] in <6f993bb1a1414adf8517b25c86b39e83>:0
at Mono.Zeroconf.Providers.AvahiDBus.DBusManager.ConnectToSystemBus () [0x0001f] in <6f993bb1a1414adf8517b25c86b39e83>:0
at Mono.Zeroconf.Providers.AvahiDBus.DBusManager.IterateThread (System.Object o) [0x00012] in <6f993bb1a1414adf8517b25c86b39e83>:0
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context (System.Object state) [0x0000e] in <f712f98eb8e445c8918edaf595bbe465>:0
at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x0008d] in <f712f98eb8e445c8918edaf595bbe465>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <f712f98eb8e445c8918edaf595bbe465>:0
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () [0x0002a] in <f712f98eb8e445c8918edaf595bbe465>:0
at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00096] in <f712f98eb8e445c8918edaf595bbe465>:0
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] in <f712f98eb8e445c8918edaf595bbe465>:0
答案1
我在 Arch Linux 上遇到了同样的问题。我查看了我的日志,发现 mono 最近已从版本 4.6.1.3-1 升级到版本 4.8.0.495-1。我能够成功地将 mono 软件包从 ALA 回滚到版本 4.6.1.3-1,现在 banshee 似乎运行正常。
我不确定如何在 Ubuntu 上执行此操作,但在 Arch 上命令是:
yaourt -S downgrader
downgrader mono
然后选择mono-4.6.1.3-1 (from ALA)
我尝试启动 Ubuntu Live 环境,甚至搜索http://packages.ubuntu.com/用于等效的 Ubuntu 命令,但似乎 mono 在许多不同的包下以不同的方式打包,如 mono-runtime 或 libmono 等,所以如果一个对 Ubuntu 更有经验的人可以为这个人提供适合 OP 的正确命令。
答案2
与 ThomasG 类似,为了确保万无一失,我还将 Mono 降级至 4.4.2 版。我这样做了:
- 使用 Synaptic 软件包管理器(是的,您仍然可以安装它,我更喜欢用它来管理软件包)我删除了与 mono 框架相关的所有软件包。其中一个项目将触发大多数项目的删除,banshee 也是如此。这很好。检查列表中您也想在之后重新安装的其他软件。另外:并非所有标题或描述中带有“mono”的搜索结果都属于 mono 框架。
- 打开“软件和更新”,在“其他软件”下找到 mono 存储库(以 开头
http://download.mono-project.com
),然后进行如下编辑:- 分布:“wheezy/snapshots”
- 组件“[version]/main”(在我的情况下为“4.4.2/main”)。
- 我最终使用命令行运行
sudo apt update
,然后sudo apt list mono-complete
检查版本。然后我用安装了 monosudo apt install mono-complete
,然后用安装了 bansheesudo apt install banshee
,这两者都要求我接受无法验证的软件包。
我打开了 banshee,它就在那里:正在运行,并且所有播放列表都完好无损。
答案3
很抱歉发布到一个非常老的主题,但万一其他人遇到这个问题 - 解决方法是添加:
<Addin id="Banshee.Daap,1.0" enabled="False" />
到/home/user/.config/banshee-1/addin-db-001/config.xml
。
您无法启用 DAAP曾经. 无需降低您的 mono 版本。
答案4
一种解决方案是使用 Docker 使其在具有旧依赖项的环境中运行。
首先,您需要设置一个 Dockerfile,在旧版本上安装 Docker 并启动它:
FROM debian:jessie-slim
ARG username
RUN apt-get update && \
apt-get install -y banshee gnome-themes && \
apt-get clean && \
apt-get autoremove && \
rm -rf /var/lib/apt/lists/*
RUN useradd ${username}
USER ${username}
CMD ["/usr/bin/banshee"]
然后,您需要通过传递您自己的本地用户名来构建它,以确保主机和客户机同步:
sudo docker build --build-arg username=$USER -t banshee .
然后,要连接到 pulseaudio,您需要从主机建立一个桥接:
pactl load-module module-native-protocol-unix socket=/tmp/pulseaudio.socket
我们通过在以下位置创建 conf 文件来通知访客/tmp/pulseaudio.client.conf
:
default-server = unix:/tmp/pulseaudio.socket
# Prevent a server running in the container
autospawn = no
daemon-binary = /bin/true
# Prevent the use of shared memory
enable-shm = false
最后一部分是通过将正确的参数传递给 docker 命令来正确连接所有内容(pulseaudio、X 服务器、dbus 等等)。
注意:此命令确实会删除 docker 的所有与安全相关的功能,因此如果 banshee 容易受到任何类型的攻击,您的机器也会如此。
docker run \
--security-opt seccomp=unconfined \
--net=host \
--volume=${HOME}:${HOME}:rw \
--volume="${HOME}/.Xauthority:${HOME}/.Xauthority:rw" \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix${DISPLAY} \
--env DBUS_SESSION_BUS_ADDRESS="${DBUS_SESSION_BUS_ADDRESS}" \
-v /run/user/$(id -u)/bus:/run/user/$(id -u)/bus:rw \
-v /var/lib/dbus/machine-id:/var/lib/dbus/machine-id \
--device /dev/snd \
-v /var/run/dbus/:/var/run/dbus \
--env PULSE_SERVER=unix:/tmp/pulseaudio.socket \
--env PULSE_COOKIE=/tmp/pulseaudio.cookie \
--volume /tmp/pulseaudio.socket:/tmp/pulseaudio.socket \
--volume /tmp/pulseaudio.client.conf:/etc/pulse/client.conf \
--volume /usr/share/dbus-1:/usr/share/dbus-1 \
--volume /usr/share/themes:/usr/share/themes \
-ti banshee
链接到已制作的 Dockerfile(免责声明:我是作者):https://github.com/Musinux/banshee-docker