[Share Experiences] deepin25下virtualbox不能枚举USB设备问题的临时解决方案
Tofloor
poster avatar
MeGusta
deepin
2025-01-22 08:56
Author

2025.1.22 更新:

deepin25默认状态下,Virtualbox安装时创建的用户组vboxusers是写在*/usr/lib/group文件里。但是目前/usr是处于只读挂载状态,/usr/lib/group*文件自然也是无法手动编辑的。

cat /usr/lib/group

winbindd_priv:x:983:
avahi:x:120:
vboxusers:x:121:

而传统的Linux用户组信息,一般是写在*/etc/group文件里。然而,我直接在/etc/group*里面按照 /usr/lib/group里的信息手动添加用户组和用户信息,重启之后,修改并没有被系统识别,反而是报错:

getent group vboxusers

error writing group entry: 无效的参数

接着我用deepseek(一种新出的ai工具)搜索“Linux系统中,用户组的信息是在哪些文件中存放的?”,AI告诉我,去看 /etc/nsswitch.conf 文件。

对比一下deepin25与deepin23的文件区别:

# deepin 25默认状态下
cat /etc/nsswitch.conf

...
group:  files altfiles
...
# deepin 23默认状态下
cat /etc/nsswitch.conf

...
group:  files winbind
...

诶,问题就出在deepin 25的这个 “altfiles”参数上。

以下是AI对这几个参数的解释:

files ,altfiles与 winbind的作用

  1. files:首先从本地文件(如 /etc/group)中查找组信息。
  2. altfiles:如果本地文件中没有找到,则会从备用文件(如 /usr/lib/group 或其他自定义路径)中查找组信息。
  3. winbind:如果本地文件中没有找到,则会通过 Winbind服务从 Windows 域(如 Active Directory)中查找组信息。

那么现在,问题就简单了:直接去除group行后面的 altfiles 参数,就可以将设置改为:除了/etc/group文件之外,不查找其他位置的用户组信息了。

操作如下:

一、修改/etc/nsswitch.conf

# 编辑/etc/nsswitch.conf,去除group files这一行后面的altfiles
sudo cp /etc/nsswitch.conf /etc/nsswitch.conf.bak
sudo vim /etc/nsswitch.conf

group:  files altfiles
改成:
group:  files

二、查看vboxusers的组ID

# 先使用cat /usr/lib/group 查看vboxusers组的ID
# 例如,这里的组ID是121:
winbindd_priv:x:983:
avahi:x:120:
vboxusers:x:121:

三、仔细检查 /usr/lib/group 中的用户组是否存在于/etc/group。如果没有,把刚才cat出来的用户组信息,添加到文件的末尾,然后把要添加的用户写在vboxusers这一行的后面,多个用户用英文逗号连接,重启系统即生效。

# 编辑/etc/group
sudo cp /etc/group /etc/group.bak
sudo vim /etc/group

...
winbindd_priv:x:983:
avahi:x:120:
vboxusers:x:121:myuser1,myuser2,myusers

注意:因为我不知道这么修改会导致什么其他的后果,这只是临时解决方案。所以编辑之前,一定记得备份原始文件!!

截图:
截图_选择区域_20250122210856.png

========================以下是旧文====================

Virtualbox一直以来,老生常谈的问题,就是默认不会将用户添加到vobxusers用户组,导致虚拟机无法使用USB设备。

截图_选择区域_20250122083400.png

deepin25不可变系统之前,都可以通过一条命令解决:

sudo usermod -a -G vboxusers myusername

但是现在deepin25里面再执行这条命令,就不起作用,也不会有任何提示。

搜索了半天,deepin25把软件添加的用户组从原来的/etc/group,移到了/usr/lib/group里面,又由于是只读系统,也没法直接编辑这个文件。

尝试自己打包deb,用编辑之后的/usr/lib/group替换系统文件,结果系统的dpkg直接坏掉了,恢复出厂设置都无法修复,提示如下。最后只能重装系统了。

截图_选择区域_20250122004943.png

另外,查阅到deepin官方昨天发出来的 关于 deepin-immutable-ctl 命令的文章,可以用以下的命令关闭不可变系统。这样操作并重启之后,系统文件是可以修改了,但是代价是,重新开启之后,按照官方说明,各种备份功能就失效了。

# 关闭不可变系统命令
sudo deepin-immutable-ctl disable-system-protect enable

由于要用windows7虚拟机来使用网银的USBKEY,虚拟机使用USB设备这个功能是刚需了。

有没有方案,既让用户对用户组进行一定的修改,又能保留不可变系统的功能呢?

PS. 比较让我惊讶的是,/etc/systemd/system/这个系统目录,竟然是可写的!

Reply Favorite View the author
All Replies
neko
deepin
Ecological co-builder
Q&A Team
2025-01-22 18:42
#1

systemd是个服务管理程序,不是系统目录,虽然systemd接管了很多系统服务。

Reply View the author
MeGusta
deepin
2025-01-22 19:30
#2
neko

systemd是个服务管理程序,不是系统目录,虽然systemd接管了很多系统服务。

这个我知道的,是发现systemd服务的配置目录可写,并没有被纳入不可变系统,用户是可以用root权限来自由设置systemd服务,但是同样重要的用户组管理却是只读的。这点就比较奇怪。

Reply View the author
MeGusta
deepin
2025-01-22 19:44
#3
It has been deleted!
神末shenmo
deepin
Spark-App
Q&A Team
2025-01-22 20:35
#4
MeGusta

这个我知道的,是发现systemd服务的配置目录可写,并没有被纳入不可变系统,用户是可以用root权限来自由设置systemd服务,但是同样重要的用户组管理却是只读的。这点就比较奇怪。

/opt被不可变也是很难理解....

Reply View the author
MeGusta
deepin
2025-01-22 20:48
#5
神末shenmo

/opt被不可变也是很难理解....

现在/opt只是指向/usr/opt的一个软链接了,不能手动修改,只能用deb传送进去。

Reply View the author
MeGusta
deepin
2025-01-22 20:51
#6
neko

systemd是个服务管理程序,不是系统目录,虽然systemd接管了很多系统服务。

不好意思,刚才没看明白,你是说systemd这种并不是系统核心组件。

Reply View the author
sifo
deepin
2025-07-29 18:41
#7

请问这个问题,现在解决了吗?想装25,但好像问题还挺多的。

Reply View the author
MeGusta
deepin
2025-07-29 21:43
#8
sifo

请问这个问题,现在解决了吗?想装25,但好像问题还挺多的。

早解决了,一样的命令:

sudo usermod -a -G vboxusers myusername

Reply View the author