您尚未登录。

#1 2017-09-28 09:35:42

EDC404
会员
注册时间: 2017-09-19
帖子: 31

【求助与探讨】关于一个简单shell脚本打开VirtualBox

arch+gnome+zsh
每天开机都要

sudo pacman -Syu

后来实在不想用wine的qq了,索性装一个vbox,镜像呢用的wiki里说的IE11 for win7
每次开机除了更新之外,又多了

depmod -a
modprobe vboxdrv vboxnetadp vboxnetflt vboxpci
VirtualBox

懒人本性上来了。。我想可以写一个简单的shell:

#!/bin/bash
pacman -Syu
depmod -a
modprobe vboxdrv vboxnetadp vboxnetflt vboxpci
VirtualBox

然后执行,结果是:

$ sudo ./vbox.sh              
[sudo] archie 的密码:
:: 正在同步软件包数据库...
 core 已经是最新版本
 extra 已经是最新版本
 community 已经是最新版本
 archlinuxcn 已经是最新版本
:: 正在进行全面系统更新...
今日无事可做
Qt WARNING: QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
No protocol specified
Qt FATAL: QXcbConnection: Could not connect to display :0
./vbox.sh: 行 5:  5369 已放弃               (核心已转储)VirtualBox

虽然说,

为了让系统启动时自动载入vboxdrv驱动和vboxnetadp、vboxnetflt、vboxpci这三个模块,建立/etc/modules-load.d/virtualbox.conf文件,在其中添加vboxdrv、vboxnetadp、vboxnetflt和vboxpci这三行文本。

# echo -e “vboxdrv\nvboxnetadp\nvboxnetflt\nvboxpci" > /etc/modules-load.d/virtualbox.conf

但是还是想一懒到底。。直接一行命令搞定。所以想问问有人知道怎么解决么?谷歌上没找到什么信息,在贴吧里看到有个人说kde下要kdesu来打开gui程序。。gnome下不是gksu么,但是
在命令行里并没有gksu这个命令

最近编辑记录 EDC404 (2017-09-28 16:04:35)


长路漫漫

离线

#2 2017-09-28 09:49:19

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,922
个人网站

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

不要用 root 跑 VirtualBox。sudo 会重置一部分环境信息的。

离线

#3 2017-09-28 10:17:54

EDC404
会员
注册时间: 2017-09-19
帖子: 31

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

依云 说:

不要用 root 跑 VirtualBox。sudo 会重置一部分环境信息的。

对噢。。那么,sudo执行

depmod -a
modprobe vboxdrv vboxnetadp vboxnetflt vboxpci

再单独执行VBOX可以么?这样不会改变环境信息吧?
仙子仙子,出于求知的目的,如果想要在shell里执行VBOX该怎么做?

最近编辑记录 EDC404 (2017-09-28 10:19:13)


长路漫漫

离线

#4 2017-09-28 11:04:28

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,922
个人网站

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

嗯。

什么叫「在shell里执行VBOX」?用 VBoxManage 管理虚拟机么?

离线

#5 2017-09-28 11:07:17

EDC404
会员
注册时间: 2017-09-19
帖子: 31

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

依云 说:

嗯。

什么叫「在shell里执行VBOX」?用 VBoxManage 管理虚拟机么?

就是,在加载模块后,在命令行输入

VirtualBox

可以打开VirtualBox 图形界面。想在shell里达到同样的目的,但是会出错:

shell如下:

#!/bin/bash
pacman -Syu
depmod -a
modprobe vboxdrv vboxnetadp vboxnetflt vboxpci
VirtualBox

完了在命令行里

sudo ./vbox.sh

执行它提示:

Qt WARNING: QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
No protocol specified
Qt FATAL: QXcbConnection: Could not connect to display :0
./vbox.sh: 行 5:  5369 已放弃               (核心已转储)VirtualBox

最近编辑记录 EDC404 (2017-09-28 11:09:51)


长路漫漫

离线

#6 2017-09-28 11:23:16

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,922
个人网站

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

对啊,因为你用了 sudo。shell 就是命令行,命令行就是 shell 啊,一个交互式一个不交互而已。

你这里报错是因为 X 服务器的权限问题。root 没权限连接到你的 X 服务器,因为授权信息在你家里( ~/.Xauthority)。XDG_RUNTIME_DIR 那个环境变量 sudo 没为你保留所以它找不到,问题不太大。

所以不要用 sudo / root 就好了。我一般把需要 root 权限的东西和不需要的分开放,这样就不会麻烦了。以及,你手动处理 vbox 的模块,不如用 vboxreload 命令。你这样子模块不会更新的。

离线

#7 2017-09-28 12:32:11

EDC404
会员
注册时间: 2017-09-19
帖子: 31

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

依云 说:

对啊,因为你用了 sudo。shell 就是命令行,命令行就是 shell 啊,一个交互式一个不交互而已。

你这里报错是因为 X 服务器的权限问题。root 没权限连接到你的 X 服务器,因为授权信息在你家里( ~/.Xauthority)。XDG_RUNTIME_DIR 那个环境变量 sudo 没为你保留所以它找不到,问题不太大。

所以不要用 sudo / root 就好了。我一般把需要 root 权限的东西和不需要的分开放,这样就不会麻烦了。以及,你手动处理 vbox 的模块,不如用 vboxreload 命令。你这样子模块不会更新的。

我我我我慢慢消化一下仙子的话
谢谢仙子指点!


长路漫漫

离线

#8 2017-09-28 15:24:40

EDC404
会员
注册时间: 2017-09-19
帖子: 31

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

小小的总结一下并提出一些疑问吧,肯定有写的和理解不对的地方,如果有人有耐心看完,请指正或者继续发出疑问,感激不尽:
1.sudo指令,在刚接触linux的时候(也就是1个月前)是理解成可以用root管理员这个身份去执行指令的,但后来发现不是所有的指令用sudo都可以去执行的(举不出例子,如果可以烦请指出,如果这里说错了也烦请指出),因为刚接触,我敲了很多不知道含义的命令,印象比较模糊。印象中有的是需要用su命令切换成root管理员才能执行的(暂时举不出例子,如果可以烦请指出,亦或者我记错了)。普通用户的sudo和root管理员的区别我个人理解是:sudo能执行的指令和不能执行的指令在某一个地方配置(不知道在哪),执行指令时的环境变量也可以配置(同样不知道在哪),但凡sudo能执行的,本质上是将一个进程(也就是这个指令)用root的权限执行。
2.仙子说:“不要用 root 跑 VirtualBox。sudo 会重置一部分环境信息的。”,意思是,不要用

sudo VirtualBox

这样的指令,也不要去做类似的比如1L中用sudo去执行那个shell脚本的事儿。但是你可以用sudo去加载模块:

sudo depmod -a
sudo modprobe vboxdrv vboxnetadp vboxnetflt vboxpci

仙子还说这样子加载模块不如用vboxreload命令,wiki中说:“如果在virtualbox内核模块运行时你更新了模块,你需要手动重新加载这些模块以使用新版本。为了这么做,请在 root 权限下运行 vboxreload”。我的理解是,当你加载了这些模块后启动了virtualbox,在这个时候如果更新了模块(不知道怎么去更新模块,如果知道请告知),比如运行virtualbox时使用到了vboxnetadp这个模块,然后它更新了,新版本是vboxnetadp_new,但是此时还是会用旧的那个vboxnetadp。如果你想此时用到新的vboxnetadp,你要sudo vboxreload vboxnetadp。否则,下次运行virtualbox时还是会用旧的vboxnetadp,即仍然使用sudo modprobe  vboxnetadp的话还是会用旧的模块。
3.关于为什么不能在普通用户的shell脚本里执行VirtualBox的理解和疑问:我的用户名叫archive,就拿这个举例子吧。在archive下运行zsh、bash随便什么终端,就是一个命令行窗口,就是一个shell。在这个shell中用sudo权限运行一个shell脚本,相当于用root管理员的身份重新开了一个shell窗口出来,然后执行这个脚本里的每一条命令。仙子说:“你这里报错是因为 X 服务器的权限问题。root 没权限连接到你的 X 服务器,因为授权信息在你家里( ~/.Xauthority)”。x服务器我想指的是x window,也就是我现在正在用的这个gnome。这里我没理解,root管理员不是权限最大的那个人么,按道理不是为所欲为么?他为什么不能连接?因为授权信息不在~/.Xauthority里?我理解中Xauthority这个文件是用来验证想启动x window(在这里也就是gnome)的某些事务的(具体什么事务不知道,有知道的请指教),我试着用su命令切换到了root管理员,找到了位于/root下的这个文件,发现里面空空如也。查看这个文件的权限,发现只有root能对其读写,其他人什么都做不了,即:
-rw-------  1 root root     0 9月  21 08:45 .Xauthority
所以不明白为什么root没权限连接到x window里。
另外,我还做了这个“危险”的尝试,我用su命令切换到root管理员后,执行并产生如下:

➜  archie whoami
root
➜  archie vboxreload vboxdrv vboxnetadp vboxnetflt vboxpci
Unloading modules: vboxnetadp vboxnetflt vboxpci vboxdrv 
Loading modules: vboxnetadp vboxnetflt vboxpci vboxdrv 
➜  archie VirtualBox                                      
Qt WARNING: QStandardPaths: wrong ownership on runtime directory /run/user/1000, 1000 instead of 0
No protocol specified
Qt FATAL: QXcbConnection: Could not connect to display :0
[1]    13341 abort (core dumped)  VirtualBox
➜  archie 

字面意思是root管理员执行不了VirtualBox?不解。


长路漫漫

离线

#9 2017-09-28 15:44:13

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,922
个人网站

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

sudo 和 su 差不太多。
vboxreload  不需要参数。
root 当然能为所欲为。但是程序默认读取的是 $HOME/.Xauthority,读不到对的数据,X 服务器就不让它连。
你可以用 xauth 或 xhost 管理 X 的授权。

离线

#10 2017-09-28 15:59:25

EDC404
会员
注册时间: 2017-09-19
帖子: 31

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

依云 说:

sudo 和 su 差不太多。
vboxreload  不需要参数。
root 当然能为所欲为。但是程序默认读取的是 $HOME/.Xauthority,读不到对的数据,X 服务器就不让它连。
你可以用 xauth 或 xhost 管理 X 的授权。

好的,万分感谢依云!剩下的不解和疑惑我再慢慢找资料学习理解
谢谢仙子~kira!


长路漫漫

离线

#11 2017-10-17 20:31:55

levin
路过此地
所在地: 地球
注册时间: 2017-04-02
帖子: 64

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

vbox安装后下次重启那些模块就自动加载了吧 不用modprobe


平均每天至少一次pacman -Syu补充信仰

离线

#12 2017-10-18 08:24:02

EDC404
会员
注册时间: 2017-09-19
帖子: 31

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

是的,后来发现不需要了

levin 说:

vbox安装后下次重启那些模块就自动加载了吧 不用modprobe


长路漫漫

离线

#13 2017-10-18 09:26:53

csbde
会员
注册时间: 2013-12-04
帖子: 45

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

EDC404 说:

是的,后来发现不需要了

levin 说:

vbox安装后下次重启那些模块就自动加载了吧 不用modprobe

没看懂,为什么要在shell里面运行?菜单里面不可以运行吗? 如果有常用的vbox,还可以直接添加桌面快捷方式,直接点击就开了。

桌面截图

离线

#14 2017-10-18 16:23:31

EDC404
会员
注册时间: 2017-09-19
帖子: 31

Re: 【求助与探讨】关于一个简单shell脚本打开VirtualBox

就是想做一个小的试验,想在shell里,然后发现不行。不是为了正常使用,哈哈

csbde 说:
EDC404 说:

是的,后来发现不需要了

levin 说:

vbox安装后下次重启那些模块就自动加载了吧 不用modprobe

没看懂,为什么要在shell里面运行?菜单里面不可以运行吗? 如果有常用的vbox,还可以直接添加桌面快捷方式,直接点击就开了。

https://i.loli.net/2017/10/18/59e6ad93a99bd.png


长路漫漫

离线

页脚