常见问题¶
连接问题¶
- 虚拟机无法连接
-
请检查以下项目:
- 虚拟机是否已开机?(新创建的虚拟机初始状态为关机状态)
- 虚拟机创建时是否选择了带有桌面环境的镜像?(01~09 号镜像都带有桌面环境)
下面的问题只会在使用 VNC 客户端登录时遇到:
- 你所在的网络可能屏蔽了 5900 端口(VNC 协议的标准端口),请尝试使用 449 端口,即在服务器地址处填入
vlab.ustc.edu.cn:449
。如果很不幸两个端口都被屏蔽了,请使用浏览器登录。
- 虚拟机连接时提示密码错误
-
远程桌面连接方式使用 Vlab 平台的登录密码,而不是虚拟机内的密码。
- 使用网络信息中心的 Web VPN 访问桌面登录页面 noVNC 时显示 noVNC encountered an error
-
报错信息如下:
SyntaxError: import declarations may only appear at top level of a module
请直接访问 vlab.ustc.edu.cn,网页版桌面登录不兼容 Web VPN。
- 希望关闭/重新打开 VNC 连接时显示的通知
-
Vlab VNC 通知设置页 可以设置是否显示 VNC 通知。关闭前请务必加入我们的聊天群组,以及时获取通知。
- SSH 连接提示
sign_and_send_pubkey: no mutual signature supported
-
该错误主要在 OpenSSH 8.8 及以上的客户端中出现,原因是 OpenSSH 8.8 默认取消了使用 RSA 公钥连接时的
ssh-rsa
签名算法。该问题已于 2022-08-08 完整修复
目前 SSH 网关程序已支持更新的 RSA 签名算法。用户无需进行以下操作。
在收到反馈后,我们已更新 01 号镜像。
若你的虚拟机编号大于 2267,那么你不需要进行处理。请编辑
$HOME/.ssh/config
文件(Windows 用户请编辑%UserProfile%\.ssh\config
),添加以下内容恢复 OpenSSH 的选项:Host * PubkeyAcceptedKeyTypes +ssh-rsa
- Ubuntu 18.04 更新软件包后无法连接桌面
-
目前确认我们推送的 vlab-vnc 剪贴板相关更新会导致 VNC 启动失败。最新版本的 vlab-vnc 包已经对 Ubuntu 18.04 的情况特殊处理,更新即可。需要编辑
/etc/vlab/vncserver-lightdm
文件,将 Xvnc 对应行中 SendPrimary 参数删去,保存文件后等待片刻即可重新连接。Ubuntu 18.04 即将在 2023 年结束支持,我们建议仍在使用 Ubuntu 18.04 用户备份数据后创建更新版本 Ubuntu 的虚拟机。
- 在运行需要大量使用内存的程序后无法连接
-
此时可尝试关机(重启失败的概率较大),然后重新开启虚拟机。如果需要更多的内存,请参考额外功能联系 Vlab 管理员。
此外,在最新的 22.04 的镜像中,我们包含了经过配置的
earlyoom
包,可以在系统内存不足时自动杀死占用内存较多的进程,并且在允许的情况下在终端和桌面上显示提示,预计可以有效地缓解此类问题。使用基于较早的镜像的虚拟机的用户可以安装vlab-earlyoom
:sudo apt update sudo apt install vlab-earlyoom
Ubuntu 22.04 镜像的更新提示
我们发现之前发布的 22.04 的镜像中
earlyoom
的通知配置不正确,并于 2023-04-10 修复。对于在该日期及之前创建虚拟机的用户,需要升级以修复:sudo apt update sudo apt install --only-upgrade vlab-earlyoom # 或者执行 apt full-upgrade 进行完整升级
在更新后,界面显示效果类似如下:
软件问题¶
Vivado 仿真报错¶
- 表现症状
-
尝试使用 Vivado 仿真时很快出现以下错误信息:
ERROR: [XSIM 43-3409] Failed to compile generated C file xsim.dir/test_behav/obj/xsim_1.c.
- 解决方法
-
打开终端,按顺序输入如下两条命令
sudo apt update sudo apt install build-essential libncurses5
新虚拟机不会出现此问题
在收到反馈后,我们已更新 01 号镜像。若你的虚拟机编号大于 2267,那么你不需要进行处理。
在线 VSCode 启动出现「只读变量」错误¶
- 表现症状
-
在终端中执行
vscode
时提示以下错误信息:/opt/vlab/bin/vscode: 行 4: UID:只读变量
- 解决方法
-
打开终端,输入
sudo dpkg-reconfigure dash
。在弹出的 "Use dash as the default system shell (/bin/sh)?" 中选择 Yes。
ping
命令无法在普通用户下使用¶
- 表现症状
-
在终端中执行
ping
命令时提示以下错误信息:ping: icmp open socket: Operation not permitted
- 解决方法
-
打开终端,输入
sudo setcap cap_net_raw+ep /bin/ping
。
新虚拟机不会出现此问题
在收到反馈后,我们已更新 01 号镜像。新创建的虚拟机不会出现此问题。
连接课程 FTP 显示中文乱码¶
部分课程搭建的 FTP 服务器不支持通用的 UTF-8 编码,这会导致使用自带的文件管理器连接 FTP 后中文显示为乱码,并且文件名后出现 (无效编码)
。可以手动安装 FileZilla 后使用 FileZilla,设定编码后连接到 FTP 服务器:
- 打开左上角 应用程序 -> 系统工具 -> MATE 终端,输入
sudo apt update && sudo apt install filezilla
安装软件。 - 打开 应用程序 -> 互联网 -> FileZilla,启动 FileZilla。
-
在 FileZilla 窗口中点击 文件 -> 站点管理器,然后点击「新站点」,输入课程 FTP 的主机(IP)和用户名、密码。由于不支持 UTF-8 的 FTP 服务器一般版本都非常老旧,因此「加密」选项也需要修改为「只使用明文 FTP(不安全)」,如图所示:
-
点击字符集,选择「使用自定义的字符集」,编码输入 GB18030。
- 点击「连接」,测试是否可用,未来需要连接时,只需要在站点管理器中双击上面新建的站点即可。
软件限制¶
由于技术更迭:
- 较早的虚拟机(编号在大约 1800 以前)默认未开启 Docker 容器支持;
- 2023 年 6 月 14 日前创建的虚拟机默认未开启 FUSE 支持。
如果有需要,请联系我们开通。
关于开启额外功能的详情请参见额外功能。
需要挂载镜像至回环设备 (loop)¶
由于技术限制,我们无法在保证安全的前提下实现回环设备的共享。请根据文件系统的不同,考虑使用 FUSE 方案,或者使用基于 libguestfs 的 guestfish 或 guestmount 进行文件操作。
一个使用 guestfish 的参考例子
# 安装下面的操作需要的软件包
$ sudo apt install --no-install-recommends libguestfs-tools
# guestfish 依赖于在虚拟机中运行 Linux 内核来实现文件系统支持,因此需要安装内核(即使容器本体根本用不到)
# 如果希望使用 KVM 加速 guestfish(需要 root),请查看下面一节。
$ sudo apt install --no-install-recommends linux-image-generic
# 可以使用 guestfish 创建一个 1G 的空白磁盘,并格式化为 GPT 分区表,创建一个分区,在 guestfish 中挂载为 /dev/sda1
# $ guestfish -N disk.img=fs:ext4:1G:gpt -m /dev/sda1
# 当然,这里我们展示更加传统的方案……
$ truncate -s 1G disk.img
$ parted disk.img mklabel gpt mkpart primary 0% 100%
# 使用 guestfish 挂载磁盘
$ guestfish -a disk.img
Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.
Type: ‘help’ for help on commands
‘man’ to read the manual
‘quit’ to quit the shell
><fs> run
><fs> list-partitions
/dev/sda1
><fs> mke2fs /dev/sda1 fstype:ext4
><fs> list-filesystems
/dev/sda1: ext4
><fs> mount /dev/sda1 /
><fs> ls /
lost+found
><fs> touch /hello
><fs> upload /etc/os-release /testfile
><fs> cat /testfile
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
><fs> download /testfile ./testfile2
><fs> exit
$ cat testfile2
# 输出省略
使用 KVM 和 TUN 设备¶
如果需要使用 /dev/kvm
或 /dev/net/tun
,在启动后手动执行以下命令:
sudo /opt/vlab/.dev/enable-dev.sh
该命令会创建所需的设备文件,但默认情况下 /dev/kvm
仅限 root 用户可以访问。例如,如果需要使用 KVM 加速的 QEMU(例如操作系统实验),可以使用以下命令:
# 安装 qemu-system-x86
sudo apt install qemu-system-x86
# 创建磁盘等配置
# ...
# 执行 KVM 加速的 QEMU,需要 root 权限
sudo qemu-system-x86_64 -cpu host -enable-kvm ...
若要在普通用户下使用 KVM 加速的 QEMU,可以将普通用户加入 kvm
用户组(GID = 107)中。对于 Ubuntu 系统,可以使用 usermod -aG kvm <username>
命令。
在进行操作系统实验时无法使用 mknod
新建设备文件¶
需使用 fakeroot
,详情可参考 2020 年 OSH 实验讲义。
虚拟机镜像选择¶
请参考 虚拟机镜像 一页。
故障排除¶
如果你的虚拟机出现问题,你可以通过 SSH 命令行以恢复模式登录虚拟机尝试进行错误排除。
系统大版本升级¶
我们不建议在 LXC 虚拟机(容器)中执行大版本升级操作(如从 20.04 升级至 22.04),如果真的需要升级,请注意:
- 确保自己能够登录到恢复模式 SSH 中;
- 请在 SSH 命令行中完成升级。在图形界面中升级可能导致升级中断,带来问题。
Ubuntu 22.04¶
如果在图形界面中从 20.04 升级至 22.04 后无法启动,请执行以下操作:
- 登录恢复模式 SSH,删除
/etc/acpi/events
下的所有文件; - 重启;
- 重启后 SSH 登录系统,运行
apt upgrade
完成剩下的升级操作。