├── requirements.txt ├── docs ├── images │ ├── 1.png │ ├── 2.png │ ├── home.png │ ├── ssh_1.png │ ├── ssh_2.png │ ├── earlyoom.png │ ├── userinfo.png │ ├── novnc-auth.png │ ├── vm-create.png │ ├── novnc-choose.png │ ├── novnc-scaling.png │ ├── novnc-toolbar.png │ ├── putty-config.png │ ├── putty-login.png │ ├── web-settings.png │ ├── FileZilla-setup.png │ ├── apps-menu-rars.png │ ├── filestash-edit.png │ ├── ibus-add-pinyin.png │ ├── novnc-clipboard.png │ ├── putty-host-key.png │ ├── vlab-in-browser.jpg │ ├── FileZilla-configs.png │ ├── FileZilla-site-1.png │ ├── apps-vscode-entry.png │ ├── apps-vscode-locale.png │ ├── filestash-download.png │ ├── filestash-entry1.png │ ├── filestash-entry2.png │ ├── filestash-upload.png │ ├── github-add-ssh-key.png │ ├── menu-ibus-settings.png │ ├── novnc-combo-keys.png │ ├── putty-win10-tile.png │ ├── realvnc-download.png │ ├── realvnc-win10-tile.png │ ├── tigervnc-security.png │ ├── tigervnc-win-icon.png │ ├── vscode2vlab │ │ ├── SSH1.png │ │ ├── SSH2.png │ │ ├── SSH3.png │ │ ├── SSH4.png │ │ ├── SSH5.png │ │ ├── SSH6.png │ │ ├── vivado1.png │ │ ├── vivado10.png │ │ ├── vivado11.png │ │ ├── vivado2.png │ │ ├── vivado3.png │ │ ├── vivado4.png │ │ ├── vivado5.png │ │ ├── vivado6.png │ │ ├── vivado7.png │ │ ├── vivado8.png │ │ ├── vivado9.png │ │ ├── vs_vlab1.png │ │ ├── vs_vlab2.png │ │ ├── vs_vlab3.png │ │ ├── vs_vlab4.png │ │ ├── vs_vlab5.png │ │ ├── vs_vlab6.png │ │ ├── vs_vlab7.png │ │ ├── vs_vlab8.png │ │ ├── vs_vlab9.png │ │ ├── vscode1.png │ │ ├── vscode10.png │ │ ├── vscode11.png │ │ ├── vscode12.png │ │ ├── vscode2.png │ │ ├── vscode3.png │ │ ├── vscode4.png │ │ ├── vscode5.png │ │ ├── vscode6.png │ │ ├── vscode7.png │ │ ├── vscode8.png │ │ └── vscode9.png │ ├── FileZilla-interface.png │ ├── apps-vscode-locale-2.png │ ├── filestash-login-fast.png │ ├── filestash-operations.png │ ├── putty-login-success.png │ ├── putty-pubkey-config1.png │ ├── putty-pubkey-config2.png │ ├── web-pubkey-generate.png │ ├── FileZilla-file-upload.png │ ├── FileZilla-inputpasswd.png │ ├── FileZilla-login-sucess.png │ ├── install-desktop-tasksel.png │ ├── tigervnc-startup-macos.png │ ├── web-pubkey-entrypoint.png │ ├── FileZilla-pubkey-config1.png │ ├── FileZilla-pubkey-config2.png │ ├── filestash-batch-download.png │ ├── putty-pubkey-savesession.png │ ├── realvnc-auth-screen-macos.png │ ├── realvnc-auth-screen-win10.png │ ├── realvnc-first-start-macos.png │ ├── realvnc-first-start-win10.png │ ├── realvnc-main-screen-macos.png │ ├── realvnc-main-screen-win10.png │ ├── tigervnc-connection-win10.png │ ├── vnc-change-resolution-old.png │ ├── filestash-login-traditional.png │ ├── putty-pubkey-format-convert.png │ ├── realvnc-auth-warning-macos.png │ ├── vnc-change-resolution-mate.png │ ├── vnc-change-resolution-xfce.png │ ├── tigervnc-authentication-macos.png │ ├── tigervnc-authentication-win10.png │ └── tigervnc-certificate-verification.png ├── quickstart.md ├── apps │ ├── riscv.md │ └── vscode.md ├── index.md ├── terms │ ├── acceptable-use-policy.md │ └── terms-of-service.md ├── credits.md ├── recruit.md ├── advanced │ ├── resources.md │ ├── install-desktop.md │ └── images.md ├── file │ ├── filestash.md │ └── clients.md ├── login │ ├── rdp.md │ ├── browser.md │ ├── vnc.md │ └── ssh.md ├── assets │ └── css │ │ └── extra.css ├── downloads.md ├── web.md ├── tutorial │ ├── git.md │ └── vscode2vlab.md └── faq.md ├── .gitignore ├── README.md ├── .github └── workflows │ └── build.yml ├── scripts └── announcements.py └── mkdocs.yml /requirements.txt: -------------------------------------------------------------------------------- 1 | mkdocs 2 | mkdocs-material 3 | jieba 4 | requests 5 | -------------------------------------------------------------------------------- /docs/images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/1.png -------------------------------------------------------------------------------- /docs/images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/2.png -------------------------------------------------------------------------------- /docs/images/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/home.png -------------------------------------------------------------------------------- /docs/images/ssh_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/ssh_1.png -------------------------------------------------------------------------------- /docs/images/ssh_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/ssh_2.png -------------------------------------------------------------------------------- /docs/images/earlyoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/earlyoom.png -------------------------------------------------------------------------------- /docs/images/userinfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/userinfo.png -------------------------------------------------------------------------------- /docs/images/novnc-auth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/novnc-auth.png -------------------------------------------------------------------------------- /docs/images/vm-create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vm-create.png -------------------------------------------------------------------------------- /docs/images/novnc-choose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/novnc-choose.png -------------------------------------------------------------------------------- /docs/images/novnc-scaling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/novnc-scaling.png -------------------------------------------------------------------------------- /docs/images/novnc-toolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/novnc-toolbar.png -------------------------------------------------------------------------------- /docs/images/putty-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/putty-config.png -------------------------------------------------------------------------------- /docs/images/putty-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/putty-login.png -------------------------------------------------------------------------------- /docs/images/web-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/web-settings.png -------------------------------------------------------------------------------- /docs/images/FileZilla-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/FileZilla-setup.png -------------------------------------------------------------------------------- /docs/images/apps-menu-rars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/apps-menu-rars.png -------------------------------------------------------------------------------- /docs/images/filestash-edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/filestash-edit.png -------------------------------------------------------------------------------- /docs/images/ibus-add-pinyin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/ibus-add-pinyin.png -------------------------------------------------------------------------------- /docs/images/novnc-clipboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/novnc-clipboard.png -------------------------------------------------------------------------------- /docs/images/putty-host-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/putty-host-key.png -------------------------------------------------------------------------------- /docs/images/vlab-in-browser.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vlab-in-browser.jpg -------------------------------------------------------------------------------- /docs/images/FileZilla-configs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/FileZilla-configs.png -------------------------------------------------------------------------------- /docs/images/FileZilla-site-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/FileZilla-site-1.png -------------------------------------------------------------------------------- /docs/images/apps-vscode-entry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/apps-vscode-entry.png -------------------------------------------------------------------------------- /docs/images/apps-vscode-locale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/apps-vscode-locale.png -------------------------------------------------------------------------------- /docs/images/filestash-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/filestash-download.png -------------------------------------------------------------------------------- /docs/images/filestash-entry1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/filestash-entry1.png -------------------------------------------------------------------------------- /docs/images/filestash-entry2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/filestash-entry2.png -------------------------------------------------------------------------------- /docs/images/filestash-upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/filestash-upload.png -------------------------------------------------------------------------------- /docs/images/github-add-ssh-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/github-add-ssh-key.png -------------------------------------------------------------------------------- /docs/images/menu-ibus-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/menu-ibus-settings.png -------------------------------------------------------------------------------- /docs/images/novnc-combo-keys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/novnc-combo-keys.png -------------------------------------------------------------------------------- /docs/images/putty-win10-tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/putty-win10-tile.png -------------------------------------------------------------------------------- /docs/images/realvnc-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/realvnc-download.png -------------------------------------------------------------------------------- /docs/images/realvnc-win10-tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/realvnc-win10-tile.png -------------------------------------------------------------------------------- /docs/images/tigervnc-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/tigervnc-security.png -------------------------------------------------------------------------------- /docs/images/tigervnc-win-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/tigervnc-win-icon.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/SSH1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/SSH1.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/SSH2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/SSH2.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/SSH3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/SSH3.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/SSH4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/SSH4.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/SSH5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/SSH5.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/SSH6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/SSH6.png -------------------------------------------------------------------------------- /docs/images/FileZilla-interface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/FileZilla-interface.png -------------------------------------------------------------------------------- /docs/images/apps-vscode-locale-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/apps-vscode-locale-2.png -------------------------------------------------------------------------------- /docs/images/filestash-login-fast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/filestash-login-fast.png -------------------------------------------------------------------------------- /docs/images/filestash-operations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/filestash-operations.png -------------------------------------------------------------------------------- /docs/images/putty-login-success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/putty-login-success.png -------------------------------------------------------------------------------- /docs/images/putty-pubkey-config1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/putty-pubkey-config1.png -------------------------------------------------------------------------------- /docs/images/putty-pubkey-config2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/putty-pubkey-config2.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vivado1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vivado1.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vivado10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vivado10.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vivado11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vivado11.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vivado2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vivado2.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vivado3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vivado3.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vivado4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vivado4.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vivado5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vivado5.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vivado6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vivado6.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vivado7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vivado7.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vivado8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vivado8.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vivado9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vivado9.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vs_vlab1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vs_vlab1.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vs_vlab2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vs_vlab2.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vs_vlab3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vs_vlab3.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vs_vlab4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vs_vlab4.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vs_vlab5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vs_vlab5.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vs_vlab6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vs_vlab6.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vs_vlab7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vs_vlab7.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vs_vlab8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vs_vlab8.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vs_vlab9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vs_vlab9.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vscode1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vscode1.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vscode10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vscode10.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vscode11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vscode11.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vscode12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vscode12.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vscode2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vscode2.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vscode3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vscode3.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vscode4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vscode4.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vscode5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vscode5.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vscode6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vscode6.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vscode7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vscode7.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vscode8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vscode8.png -------------------------------------------------------------------------------- /docs/images/vscode2vlab/vscode9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vscode2vlab/vscode9.png -------------------------------------------------------------------------------- /docs/images/web-pubkey-generate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/web-pubkey-generate.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | env/ 3 | venv/ 4 | site/ 5 | .env/ 6 | 7 | # Generated from scripts 8 | /docs/announcements.md 9 | -------------------------------------------------------------------------------- /docs/images/FileZilla-file-upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/FileZilla-file-upload.png -------------------------------------------------------------------------------- /docs/images/FileZilla-inputpasswd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/FileZilla-inputpasswd.png -------------------------------------------------------------------------------- /docs/images/FileZilla-login-sucess.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/FileZilla-login-sucess.png -------------------------------------------------------------------------------- /docs/images/install-desktop-tasksel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/install-desktop-tasksel.png -------------------------------------------------------------------------------- /docs/images/tigervnc-startup-macos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/tigervnc-startup-macos.png -------------------------------------------------------------------------------- /docs/images/web-pubkey-entrypoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/web-pubkey-entrypoint.png -------------------------------------------------------------------------------- /docs/images/FileZilla-pubkey-config1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/FileZilla-pubkey-config1.png -------------------------------------------------------------------------------- /docs/images/FileZilla-pubkey-config2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/FileZilla-pubkey-config2.png -------------------------------------------------------------------------------- /docs/images/filestash-batch-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/filestash-batch-download.png -------------------------------------------------------------------------------- /docs/images/putty-pubkey-savesession.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/putty-pubkey-savesession.png -------------------------------------------------------------------------------- /docs/images/realvnc-auth-screen-macos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/realvnc-auth-screen-macos.png -------------------------------------------------------------------------------- /docs/images/realvnc-auth-screen-win10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/realvnc-auth-screen-win10.png -------------------------------------------------------------------------------- /docs/images/realvnc-first-start-macos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/realvnc-first-start-macos.png -------------------------------------------------------------------------------- /docs/images/realvnc-first-start-win10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/realvnc-first-start-win10.png -------------------------------------------------------------------------------- /docs/images/realvnc-main-screen-macos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/realvnc-main-screen-macos.png -------------------------------------------------------------------------------- /docs/images/realvnc-main-screen-win10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/realvnc-main-screen-win10.png -------------------------------------------------------------------------------- /docs/images/tigervnc-connection-win10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/tigervnc-connection-win10.png -------------------------------------------------------------------------------- /docs/images/vnc-change-resolution-old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vnc-change-resolution-old.png -------------------------------------------------------------------------------- /docs/images/filestash-login-traditional.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/filestash-login-traditional.png -------------------------------------------------------------------------------- /docs/images/putty-pubkey-format-convert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/putty-pubkey-format-convert.png -------------------------------------------------------------------------------- /docs/images/realvnc-auth-warning-macos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/realvnc-auth-warning-macos.png -------------------------------------------------------------------------------- /docs/images/vnc-change-resolution-mate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vnc-change-resolution-mate.png -------------------------------------------------------------------------------- /docs/images/vnc-change-resolution-xfce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/vnc-change-resolution-xfce.png -------------------------------------------------------------------------------- /docs/images/tigervnc-authentication-macos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/tigervnc-authentication-macos.png -------------------------------------------------------------------------------- /docs/images/tigervnc-authentication-win10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/tigervnc-authentication-win10.png -------------------------------------------------------------------------------- /docs/images/tigervnc-certificate-verification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/USTC-vlab/docs/HEAD/docs/images/tigervnc-certificate-verification.png -------------------------------------------------------------------------------- /docs/quickstart.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/play-circle-outline 3 | --- 4 | 5 | # 快速开始 6 | 7 | 本文档教你如何在 Vlab 上快速创建并使用一个虚拟机。 8 | 9 | ## 1. 创建虚拟机 10 | 11 | 首先,在[虚拟机管理页面](https://vlab.ustc.edu.cn/vm/)使用统一身份认证登录。 12 | 13 | ![login](images/1.png) 14 | 15 | 登录后页面显示你还没有虚拟机,点击绿色的 ==新建虚拟机== 按钮。 16 | 17 | ![Create new VM](images/vm-create.png) 18 | 19 | 在创建新虚拟机的页面[选择一个镜像](advanced/images.md),输入一个虚拟机名称。 20 | 21 | 创建好虚拟机后,稍等 3 分钟,然后将虚拟机开机。 22 | 23 | ## 2. 设置登录密码 24 | 25 | 接下来准备 VNC 登录,在右上角点击“修改密码”: 26 | 27 | ![Toolbar](images/web-settings.png){: .img-border } 28 | 29 | 输入一个新密码。这个密码用于通过 VNC 连接虚拟机,以及在没有统一身份认证的时候登录平台管理虚拟机使用。 30 | 31 | ## 3. 连接虚拟机并使用 32 | 33 | 在[虚拟机管理页面](https://vlab.ustc.edu.cn/vm/)点击 ==网页登录==,或使用 VNC 客户端连接(见左侧目录),即可开始使用虚拟机。 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # USTC Vlab 远程教学云桌面平台 使用文档 2 | 3 | 本文档使用 [MkDocs][mkdocs] 构建,采用 [Material for MkDocs][mkdocs-material] 主题。 4 | 5 | Markdown 源文件位于 [docs](docs) 目录中,左侧目录可以修改 [`mkdocs.yml`](mkdocs.yml) 最下面的 `nav` 项,其余事项请参考 Material 主题的说明文档。 6 | 7 | 所有推送到 master 分支的修改将会在 GitHub Actions 中自动生成,经由 gh-pages 分支并部署到 [vlab.ustc.edu.cn](https://vlab.ustc.edu.cn/docs/),通常整个流程的运行时间在 1 分钟内。 8 | 9 | 写作规范参见 [sparanoid/chinese-copywriting-guidelines](https://github.com/sparanoid/chinese-copywriting-guidelines/blob/master/README.zh-CN.md)。 10 | 11 | 如果对本文档有任何意见或建议,欢迎在 Issues 中讨论,或直接提交修改到 Pull Requests 中。如果对本平台有任何疑问,请邮件联系 vlab () ustc.edu.cn。 12 | 13 | ## 许可 14 | 15 | 本文档以 [CC BY-NC-ND 4.0 协议](https://creativecommons.org/licenses/by-nc-nd/4.0/)共享。 16 | 17 | 18 | [mkdocs]: https://www.mkdocs.org/ 19 | [mkdocs-material]: https://squidfunk.github.io/mkdocs-material/ 20 | -------------------------------------------------------------------------------- /docs/apps/riscv.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/toolbox 3 | --- 4 | 5 | # RISC-V 工具链 6 | 7 | Vlab 为虚拟机提供了 RISC-V 的 GCC 工具链和 [RARS 模拟器][rars]。 8 | 9 | [rars]: https://github.com/TheThirdOne/rars 10 | 11 | ## 使用 GCC 工具链 12 | 13 | 32 位 GCC 工具链位于 `/opt/vlab/riscv`,可以通过命令行直接使用,例如: 14 | 15 | ```shell 16 | /opt/vlab/riscv/bin/riscv32-unknown-elf-gcc main.c -o main 17 | ``` 18 | 19 | 64 位 GCC 工具链位于 `/opt/vlab/riscv64`,可以通过命令行直接使用,例如: 20 | 21 | ```shell 22 | /opt/vlab/riscv64/bin/riscv64-unknown-linux-gcc main.c -o main 23 | ``` 24 | 25 | !!! question "找不到 /opt/vlab" 26 | 27 | 若你的虚拟机里没有 `/opt/vlab`,请联系我们以获得支持。 28 | 29 | 64 位 GCC 工具链本身的编译方式及配置参数可以在我们的[编译脚本](https://github.com/USTC-vlab/vlab-software/blob/master/riscv/build.sh)中查看。 30 | 31 | ## 使用 RARS 32 | 33 | RARS 可以从桌面左上角的应用程序菜单中打开。 34 | 35 | ![Applications Menu](../images/apps-menu-rars.png) 36 | 37 | ## 使用 Verilator 38 | 39 | Verilator 位于 `/opt/vlab`,该路径默认位于 PATH 中,可以通过命令行直接使用。 40 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/information 3 | --- 4 | 5 | # 远程教学云桌面 6 | 7 | !!! success "开始使用" 8 | 9 | 请在左侧目录查找你想要了解的内容。不妨先从[快速开始](quickstart.md)进入使用吧! 10 | 11 | 远程教学云桌面项目(Vlab 项目)是由科大计算机实验教学中心提供的、基于互联网的 7x24 远程进行硬件、系统和软件教学实验平台,可校外登录使用,支持 SSH、浏览器和 VNC 远程桌面方式使用。 12 | 13 | !!! note "讨论与通知" 14 | 15 | 如果你对本平台有任何疑问,欢迎加入 QQ 群 881039466(一群,已满)1004525117(二群)讨论或邮件联系 vlab:fontawesome-solid-at:ustc.edu.cn。 16 | 17 | 我们会通过 QQ 群公告和 [GitHub Issue](https://github.com/USTC-vlab/notifications) 的方式发布有关平台动态的通知,你也可以在这里[查看所有的通知公告](announcements.md)。**我们建议你至少关注一个通知渠道,以免错过平台更新或维护通知**。 18 | 19 | ![Vlab in Browser](images/vlab-in-browser.jpg) 20 | 21 | 本平台通过虚拟机的方式进行软件和系统方面的实验,基于 Linux 容器的方式使得线上体验和线下机房一致,还能够远程操作已部署好的 FPGA 集群进行硬件实验。 22 | 23 | 平台集群基于 Linux 容器搭建,计算与存储分离,提供给学生 7x24 小时使用。架构方面和 Linux 容器部署使用方面的稳定性已经经过计算机行业多年验证,系统架构的瓶颈仅受限于网络带宽。 24 | 25 | !!! success "欢迎对我们致谢说明" 26 | 27 | 如果 Vlab 帮助你完成了你的项目,我们将会非常开心地看到你在论文或报告中对 Vlab 致谢。 28 | 29 | 参考模板: 30 | 31 | > 本项目得到了中国科学技术大学 Vlab 实验平台的帮助与支持。 32 | 33 | > This project is accomplished with the help of Vlab Platform of University of Science and Technology of China. 34 | -------------------------------------------------------------------------------- /docs/terms/acceptable-use-policy.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/file-document-alert 3 | --- 4 | 5 | # 可接受的使用方式 (Acceptable Use Policy) 6 | 7 | ## 〇、总则 {#overview} 8 | 9 | 0.1 Vlab 远程虚拟桌面(本服务、本平台)由[计算机实验教学中心](https://cslab.ustc.edu.cn/)(我们)提供。用户通过本平台提供的指定接口使用本服务。 10 | 11 | 0.2 用户在使用本服务时的所有行为受到[服务条款](terms-of-service.md)约束。用户开始使用本服务时,即视为已阅读并无条件同意本条款。 12 | 13 | 0.3 用户在使用本服务时需要严格遵守本文规定的可接受的使用方式。我们有权随时采取任何必要措施以确保您对本服务的使用方式符合本文规定。 14 | 15 | ## 一、允许行为 {#allowed-usage} 16 | 17 | 1.1 从事在中国科学技术大学课程学习与科研中所需的活动 18 | 19 | 1.2 存储在中国科学技术大学课程学习与科研中所需的数据 20 | 21 | ## 二、禁止行为 {#prohibited-usage} 22 | 23 | 2.1 用户不得使用本服务从事任何违反中华人民共和国法律法规和中国科学技术大学校规校纪的活动。 24 | 25 | 2.2 用户不得进行任何攻击本服务或其他服务、或干扰本服务或其他服务正常稳定运行的行为。 26 | 27 | 2.3 除非经过管理人员授权,用户不得利用本服务进行以下行为: 28 | 29 | - 运行、存储或传播恶意程序,包括但不限于计算机病毒和木马 30 | - 运行具有营利性质的服务 31 | - 加密货币挖矿 32 | - 连接 Tor 网络 33 | - 连接科大校园网络通 (\*) 34 | - 运行面向不特定用户的网络服务 (\*) 35 | - 可能导致 IDC 投诉的行为,如下载盗版资源 36 | - 用户在中国科学技术大学课程学习与科研以外的活动,如运行游戏等 37 | - 经管理员认定的其他禁止行为 38 | 39 | ## 三、资源利用率 {#resource-usage} 40 | 41 | 3.1 本平台提供的服务为共享环境,所有资源(CPU、内存、网络、磁盘 I/O)等均为共享资源。 42 | 43 | 3.2 用户需要额外的资源以从事在中国科学技术大学课程学习与科研中所需的活动时,可以向我们申请额外的资源。 44 | (参见 [虚拟机资源](../advanced/resources.md)) 45 | 46 | 3.3 用户长期占用超额的资源导致服务质量或稳定性下降时,我们会要求用户降低资源占用,或关闭虚拟机。 47 | -------------------------------------------------------------------------------- /docs/credits.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/check-all 3 | --- 4 | 5 | # 平台支持 6 | 7 | 本平台由**[中国科学技术大学计算机科学与技术学院](https://cs.ustc.edu.cn/)**主办。另外,以下团体提供了非常重要的支持: 8 | 9 | - **[计算机实验教学中心](https://cslab.ustc.edu.cn/)**承办本平台,提供服务器、机房、校园网接入以及 `vlab.ustc.edu.cn` 域名 10 | - **[校 Linux 用户协会](https://lug.ustc.edu.cn/)**提供技术支持与指导 11 | 12 | ## 支持人员 {#staff} 13 | 14 | ### 第一版 vlab 远程教学云桌面平台 {#1st-gen} 15 | 16 | 指导老师 17 | 18 | : 卢建良,邢凯 19 | 20 | 系统平台搭建 21 | 22 | : 李子天 23 | 24 | 网页平台及运维 25 | 26 | : 付佳伟,陶柯宇 27 | 28 | ### 第二版 vlab 远程教学云桌面平台 {#2nd-gen} 29 | 30 | 指导老师 31 | 32 | : 卢建良,邢凯 33 | 34 | 平台搭建及运维 35 | 36 | : 付佳伟,陶柯宇,彭定澜,郑师程,王永福 37 | 38 | 其他参与开发及维护的人员 39 | 40 | : 明宇龙,胡宗升,袁一玮,闫超美,李博诚,孙策 41 | 42 | ## 开源软件致谢 {#open-source} 43 | 44 | - [Proxmox Virtual Environment](https://www.proxmox.com/en/proxmox-ve) - GNU Affero General Public License v3.0 45 | - [Django Web framework](https://www.djangoproject.com/) - The 3-Clause BSD License 46 | - [noVNC](https://novnc.com/) - Mixed licenses 47 | - [SSH Piper](https://github.com/tg123/sshpiper) - MIT License 48 | - [Filestash](https://www.filestash.app/) - GNU Affero General Public License v3.0 49 | - [code-server](https://github.com/cdr/code-server) - MIT License 50 | - [MkDocs](https://www.mkdocs.org/) (The 2-Clause BSD License) and [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) (MIT License) 51 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: build 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | workflow_dispatch: {} 7 | repository_dispatch: {} 8 | 9 | permissions: 10 | contents: write 11 | 12 | jobs: 13 | build: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v4 17 | - uses: actions/setup-python@v5 18 | with: 19 | python-version: 3 20 | - name: Install dependencies 21 | run: | 22 | pip3 install -r requirements.txt 23 | - name: Fetch announcements 24 | env: 25 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 26 | run: | 27 | python3 scripts/announcements.py 28 | - name: Build docs 29 | run: | 30 | mkdocs -v build 31 | : > site/.nojekyll 32 | - name: Deploy to GitHub Pages 33 | run: | 34 | CINFO="$(git log -1 --pretty="%an: [%h] %s")" 35 | git clone --depth=1 --branch=gh-pages --single-branch --no-checkout \ 36 | "https://${GITHUB_ACTOR}:${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git" test 37 | mv test/.git site/.git && rmdir test/ 38 | pushd site/ &>/dev/null 39 | git add -A 40 | git -c user.name=GitHub -c user.email=noreply@github.com commit \ 41 | -m "Auto deploy from GitHub Actions build ${GITHUB_RUN_NUMBER}" \ 42 | -m "$CINFO" 43 | git push 44 | popd &>/dev/null 45 | -------------------------------------------------------------------------------- /docs/recruit.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/account-plus 3 | --- 4 | 5 | # 招贤纳士 6 | 7 | !!! success "创新小组期待您的加入,QQ 群:**484487202**" 8 | 9 | 大家好,我是计算机实验教学中心的卢建良老师,主要从事计算机专业硬件类实验教学、实验课程开发、实验平台建设等工作,现招募若干本科生同学参与到实验课程开发和实验平台建设等工作中来,下面是我们开发和维护的各实验平台的简单介绍: 10 | 11 | !!! tip "远程教学云桌面系统([vlab.ustc.edu.cn](https://vlab.ustc.edu.cn/))" 12 | 13 | 可为用户提供 7×24 小时在线可自由定制的远程 Linux 系统,为科大学生的上机实验和日常学习提供支撑,目前已有约 2000 位用户,累计在线服务时长约 8 万小时。 14 | 15 | !!! info "Verilog 在线测评系统([verilogoj.ustc.edu.cn](https://verilogoj.ustc.edu.cn))" 16 | 17 | 可为学生提供在线的 Verilog 语法学习与测评功能,对快速上手 Verilog 语言具有一定效果,目前已有用户 700 多人,约 5 万次提交。除本校外,在清华大学、中国科学院大学等兄弟院校也有所应用。 18 | 19 | !!! info "FPGA 在线实验平台([fpgaol.ustc.edu.cn](https://fpgaol.ustc.edu.cn))" 20 | 21 | 该平台可为用户提供 FPGA 设备节点的在线接入功能,应用于数电实验和组成原理实验,累计接入约 9 万次,目前正在进行 FPGA 全流程开发平台的研制工作,将外设定制、代码编写、工程编译、烧写调试等功能全部在线上实现。 22 | 23 | !!! info "Online Judge 在线评测平台([oj.ustc.edu.cn](http://oj.ustc.edu.cn))" 24 | 25 | 该平台可为用户提供在线编程练习功能。 26 | 27 | !!! info "RISC-V 指令集架构片上系统(RVSOC)" 28 | 29 | 计划基于 FPGA 平台开发一款基于 RISC-V 的片上系统,能够运行操作系统和应用程序,同时配套完善的教程,用户可以依靠此系统完成自己专属的处理器、操作系统、应用程序的开发,快速提升计算机系统能力,目前原型系统正在开发过程中。 30 | 31 | 以上是对当前正在开发和维护的 4 款平台的介绍,此外还有几个平台正在酝酿之中。如果您满足以下条件中的任意一条,欢迎加入创新小组 QQ 群:484487202,后面我会与大家联系,并组织相关的交流和培训。 32 | 33 | 1. 能够为上述实验平台的实现或改进制定技术方案,或能够参与到实际开发过程中来。 34 | 2. 能够参与实验平台的日常维护,或参与相关说明文档的撰写,或参与使用视频的录制及剪辑。 35 | 3. 对实验平台的界面、布局、风格等进行方案设计,提升实验平台的用户友好性和美观性。 36 | 4. 对改进实验教学有一些好的想法,同时愿意与人分享并将其实现;或者有时间和意愿参与到实验平台功能定义的讨论中来。 37 | 5. 对实验平台感兴趣,希望学习其技术方案和源代码,且以后能逐步参与到平台的开发维护中来。 38 | 39 | 如有任何疑问可直接联系卢老师 ,微信 18949834903,QQ 2921999133,西区电三楼 411 室。 40 | -------------------------------------------------------------------------------- /docs/terms/terms-of-service.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/file-document-alert 3 | --- 4 | 5 | # 服务条款 (Terms of Service) 6 | 7 | ## 〇、总则 {#overview} 8 | 9 | 0.1 Vlab 远程虚拟桌面(本服务、本平台)由[计算机实验教学中心](http://cs.ustc.edu.cn/)(我们)提供。用户通过本平台提供的指定接口使用本服务。 10 | 11 | 0.2 用户在使用本服务时的所有行为受到本条款约束。用户开始使用本服务时,即视为已阅读并无条件同意本条款。 12 | 13 | ## 一、服务范围 {#service-coverage} 14 | 15 | 1.1 本服务面向的用户应当具有以下身份之一: 16 | 17 | - 科大计算机学院在读的本科生、硕士研究生或博士研究生 18 | - 科大在职教工或博士后 19 | - 参与或曾经参与本平台的开发与维护工作的[工作人员](../credits.md#staff) 20 | - 不符合以上身份,但经本平台管理人员允许的 21 | 22 | 1.2 用户开始使用本服务时应满足 1.1 节所述的资格要求。若用户在开始使用本服务时即不满足资格要求,我们有权暂停或终止服务。 23 | 24 | 1.3 在满足 1.2 节所述的前提下,当用户因毕业离校或退休等原因不再符合 1.1 节所述的资格时,我们将保留用户数据至不早于当前学期结束(以科大教务处公布的[教学日历](https://www.teach.ustc.edu.cn/calendar)为准),用户应当在此时间段内为停止使用本服务做好必要的准备。 25 | 26 | 1.4 在满足 1.2 节所述的前提下,当用户长期未登录使用本服务时,我们将为用户保留数据至少六个月。我们将会不定期清理长期未使用且超出数据保留期限的用户数据。在超期清理后,若用户仍然符合 1.2 节所述条件,可登录本平台重新开始使用服务。 27 | 28 | ## 二、服务承诺 {#service-agreement} 29 | 30 | 2.1 本平台及工作人员的行为受中华人民共和国法律法规、中国科学技术大学校规校纪的约束。 31 | 32 | 2.2 本服务为非营利性服务,我们不会以任何名义向用户强制收取任何费用。 33 | 34 | 2.3 我们会尽力保证服务稳定,但不对服务质量作任何保证。 35 | 36 | 2.4 我们承诺不会将用户提交的隐私数据泄露给第三方,用户隐私受到法律保护。 37 | 38 | 2.5 用户通过本平台创作、发表的合法原创内容,其著作权属于用户。 39 | 40 | 2.6 当本服务出现重大变更时,我们会通过用户提供的联系方式通知用户。 41 | 42 | ## 三、用户义务 {#user-obligations} 43 | 44 | 3.1 用户不得利用本服务从事任何违反中华人民共和国法律法规、中国科学技术大学校规校纪和社会公共道德的活动。 45 | 46 | 3.2 未经本服务管理人员允许,用户不得利用本服务进行任何营利性活动。 47 | 48 | 3.3 用户在使用本服务时需要严格遵守本条款及[可接受的使用方式 (AUP)](acceptable-use-policy.md)。如果用户的行为违反了相关条款和规则,我们有权采取清除违规内容、终止服务、向有关部门举报等措施进行反制。用户须承担违规行为所产生的一切后果。 49 | 50 | ## 四、规则变更 {#terms-updates} 51 | 52 | 4.1 我们有权对本服务总则和其他用户规则、协议做出更新和修改。我们会在这些规则、协议内容发生的变化时通知用户。 53 | -------------------------------------------------------------------------------- /docs/advanced/resources.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/cart-plus 3 | --- 4 | 5 | # 虚拟机资源 6 | 7 | 目前创建的虚拟机配置统一为 2 核心 CPU、4 GB 内存与 16 GB 存储空间,该配置足够进行大部分计算机学院课程学习活动(如使用 Vivado 等)。对于 LXC 虚拟机,[Vlab 实验软件](images.md#vlab-software)不占用虚拟机的存储空间。 8 | 9 | 虚拟机直接接入 Vlab 内网,通过 NAT 访问科大校园网及互联网(教育网出口),因此虚拟机内无需(也禁止)使用网络通,虚拟机也无法直接从 Vlab 外部访问。 10 | 如果有实验需要访问运行在虚拟机中的端口的话,我们推荐你首先尝试 [SSH 端口转发][ssh-port-forwarding]。 11 | 它比端口映射更加安全,并且绝大多数时候能够满足你的需求。 12 | 13 | [ssh-port-forwarding]: https://201.ustclug.org/dev/ssh/#port-forwarding 14 | 15 | ## 申请额外资源 {#extra-resources} 16 | 17 | 如果你对系统资源有额外的需求,如 18 | 19 | - 需要额外的计算或存储资源(CPU、内存、存储等) 20 | - (对于 LXC 虚拟机)需要开启额外的功能 21 | - 需要开放网络端口用于从外部访问虚拟机内的服务 22 | 23 | 请联系 Vlab 管理员,在条件允许的情况下,我们会尽力满足合理的需求。 24 | 25 | !!! warning "注意" 26 | 27 | 大多数的修改配置操作都需要先将虚拟机关机,因此请注意保存好未完成的工作。 28 | 29 | !!! info "CPU 和内存" 30 | 31 | 虚拟机的 CPU 和内存增减较为容易,且是随使用量动态分配的(指定的容量为动态上限),因此对于这两种资源申请我们会较为宽松地考虑。对于容量特别大的资源请求,我们可能会要求你告知使用方式和使用时间,并在使用时间结束后回收这些资源,确保 Vlab 能够为每位同学提供尽可能好的服务质量。 32 | 33 | !!! info "硬盘容量" 34 | 35 | 由于存储不是动态分配的(而是全额预留的容量),且调整较为复杂,因此如果你需要超过 64 GB 的总容量,我们建议你先看看[科大超算中心 GitLab](https://git.ustc.edu.cn/) 和[睿客网](https://rec.ustc.edu.cn/)是否能够满足你的存储需求,再考虑向我们申请额外的存储。 36 | 37 | !!! info "端口映射" 38 | 39 | 若因实验需要将虚拟机内的网络端口开放到公网访问,且无法使用 [SSH 端口转发][ssh-port-forwarding]等更加安全的方式时,我们可以在网关上配置 NAT 端口映射,此时虚拟机内能直接得到外部访问的 IP 和端口。 40 | 41 | 由于合规性要求,我们会严格处理端口映射的申请,并且不会映射低端口(0-1023)和一些敏感端口(如 6379、8080 等)。 42 | 43 | ## 虚拟机互联 {#vm-interconnect} 44 | 45 | Vlab 的所有虚拟机位于同一个二层网络中,如果有组队合作的需求,多个虚拟机之间可以直接通过内网地址互联(即 172.31 开头的 IP 地址,或者 2001:da8:d800:4bfc 开头的 IPv6 地址)。出于安全原因,TCP 22、1024-1029、5900 端口不能用于互联(UDP 端口暂无限制)。 46 | -------------------------------------------------------------------------------- /docs/file/filestash.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/folder-outline 3 | --- 4 | 5 | # 使用浏览器进行文件传输 6 | 7 | Vlab 支持虚拟机与本机之间的文件传输,在首页上可以看到有「文件传输」选项: 8 | 9 | ![Filestash entry 1](../images/filestash-entry1.png) 10 | 11 | 同时也可以在「虚拟机管理」界面里找到入口: 12 | 13 | ![Filestash entry 2](../images/filestash-entry2.png) 14 | 15 | 也可以直接使用域名: 访问文件传输页面。 16 | 17 | ## 登录 18 | 19 | 新版浏览器文件传输登录时不再需要输入学号、vlab 平台密码、Linux 用户名以及 Linux 密码。 20 | 21 | 如果已经登录管理页面,可以直接进行快速登录。 22 | 23 | ![Filestash login (fast)](../images/filestash-login-fast.png) 24 | 25 | 对于大部分用户,直接点击「连接」(CONNECT)即可登录。 26 | 若你有多个虚拟机,需要额外输入虚拟机 ID;若你的 Linux 用户名不为 ubuntu,需要额外输入登录的用户名。 27 | 默认情况下可以不输入 Linux 密码登录,如果此方法无法登录,可以勾选对应选项输入 Linux 密码。 28 | 29 | 如果未登录管理页面,可以选择使用传统登录方式: 30 | 31 | ![Filestash login (traditional)](../images/filestash-login-traditional.png) 32 | 33 | 如果使用新版文件管理无法登录,请联系我们。 34 | 35 | ## 文件管理器操作 36 | 37 | 文件管理器提供新建文件、新建文件夹、更改目录、修改文件名、删除文件、快速访问、文件上传、文件下载、文件编辑等功能: 38 | 39 | ![Filestash UI](../images/filestash-operations.png) 40 | 41 | ## 文件上传与文件下载 42 | 43 | 文件上传支持的最大大小为 1024 MB (1 GB)。直接将本机的文件拖拽到网页端文件管理器即能将文件上传到对应目录: 44 | 45 | ![Filestash upload](../images/filestash-upload.png) 46 | 47 | 也可以点击网页右下角的上传按钮,选择需要上传的文件。 48 | 49 | 当需要下载文件到本机时,点击需要下载的文件,进入文件的编辑页面,点击右上角的「下载」图标完成文件下载: 50 | 51 | ![Filestash download](../images/filestash-download.png) 52 | 53 | 如果需要下载多个文件或下载文件夹,点击文件左上角的选择框即可选择文件夹或多个文件,然后点击提示栏的「下载」(DOWNLOAD)即可: 54 | 55 | ![Filestash download multiple](../images/filestash-batch-download.png) 56 | 57 | ## 文件编辑 58 | 59 | 对于文本文件,在网页端文件管理器点击需要编辑的文件,可进入网页端编辑器进行编辑并保存: 60 | 61 | ![Filestash text edit](../images/filestash-edit.png) 62 | 63 | !!! note "在线文件编辑的大小限制" 64 | 65 | 若文件大小大于 16 MiB,则会直接显示下载选项。 66 | -------------------------------------------------------------------------------- /docs/advanced/install-desktop.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/monitor-edit 3 | --- 4 | 5 | # 手动安装桌面环境 6 | 7 | !!! warning "注意" 8 | 9 | 本节内容只适用于熟悉 Linux 操作系统的用户,否则建议使用已配置好的桌面环境。 10 | 11 | Vlab 默认提供的桌面环境为 Xfce4,如果你想安装 MATE, LXDE 等其他桌面环境,可以按照如下指示操作。以下将以在 Debian 11 上安装 MATE 桌面环境为例。 12 | 13 | ## 安装 LightDM 和 VNC 14 | 15 | 如果使用的是不带桌面的镜像,为了与 Vlab 的 VNC 后端连接,需要安装我们提供的 vlab-vnc 软件包(限 Debian / Ubuntu,暂无 RPM 安装包)。 16 | 17 | 先添加 Vlab 软件源。以 root 权限运行: 18 | 19 | ```shell 20 | echo "deb [trusted=yes] https://vlab.ustc.edu.cn/repo/ ./" > /etc/apt/sources.list.d/vlab.list 21 | ``` 22 | 23 | 安装 vlab-vnc 24 | 25 | ```shell 26 | apt update 27 | apt install vlab-vnc 28 | ``` 29 | 30 | 在安装过程中会询问键盘布局,选择 English (US) 即可。 31 | 32 | 此外,Debian 镜像默认仅有设置了随机密码的 root。为了方便桌面使用(以 root 操作桌面不是一个好习惯),建议创建一个新用户。 33 | 34 | ```shell 35 | adduser vlab 36 | ``` 37 | 38 | ## 安装桌面环境 39 | 40 | 经过测试,以下操作可能导致 SSH 连接中断,因此建议在救援模式([Web](../login/ssh.md#web-username), [SSH](../login/ssh.md#recovery))中操作。使用 tasksel 安装桌面环境。 41 | 42 | ```shell 43 | # 如果遇到安装问题,执行以下两行命令 44 | apt-get install --reinstall debconf 45 | dpkg-reconfigure tasksel 46 | # 启动 tasksel 配置菜单 47 | tasksel 48 | ``` 49 | 50 | 进入交互式页面,选择你需要的桌面环境后输入回车即可安装,这里以 MATE 为例。 51 | 52 | ![Tasksel](../images/install-desktop-tasksel.png) 53 | 54 | 安装完成后重启系统便可以使用浏览器的在线登录或使用 TigerVNC 客户端登录你的虚拟机,具体做法可参考左侧文档。进一步的配置,如建立新用户,安装中文环境与输入法等请参考网络上的 Linux 教程。 55 | 56 | !!! info "注意" 57 | 必须使用 LightDM 桌面管理器。若安装桌面环境时自动安装了其他桌面管理器,请使用命令 `dpkg-reconfigure lightdm` 切换回 LightDM 桌面管理器。若安装了 `network-manager` 软件包请务必卸载,否则可能导致无法连接网络。 58 | 59 | !!! info "更加精简的安装" 60 | 由于 Vlab 环境不需要诸如蓝牙、无线网络等配置,而 `tasksel` 默认安装的是完整环境,有经验的用户可以考虑自行使用 `apt` 安装桌面环境所需的包。此外,`--no-install-recommends` 选项可以更激进地避免安装不必要的包,推荐经验丰富的用户选择。 61 | 62 | !!! info "不兼容的软件包" 63 | 目前已知 `connman` 会导致网络连接问题,如果安装了 `connman` 请卸载。 64 | -------------------------------------------------------------------------------- /docs/login/rdp.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/microsoft-windows 3 | --- 4 | 5 | # 通过 RDP 远程桌面登录虚拟机 6 | 7 | !!! failure "尚未完成" 8 | 9 | 目前相关服务或功能尚未开放,本页面所述的内容仅供参考。 10 | 11 | !!! example "支持的虚拟机和客户端" 12 | 13 | RDP 登录方式仅支持 :fontawesome-brands-windows: Windows KVM 虚拟机。 14 | 15 | RDP 登录方式支持包括 Windows、macOS、Linux、iOS 和 Android 在内的客户端系统。 16 | 17 | ## 获取 RDP 客户端 18 | 19 | === ":fontawesome-brands-windows: Windows" 20 | 21 | Windows 操作系统自带了 RDP 客户端,你可以直接在 **开始菜单:material-chevron-right:Windows 附件:material-chevron-right:远程桌面连接** 中找到它。 22 | 23 | === ":fontawesome-brands-apple: macOS" 24 | 25 | 从 Mac App Store 获取 [Microsoft Remote Desktop](https://apps.apple.com/us/app/microsoft-remote-desktop/id1295203466)。 26 | 27 | 出于未知的原因,该应用程序不在中国区 Mac App Store 提供。如果你没有其他地区的 Apple ID,也可以参考 [Microsoft Docs: macOS 客户端入门](https://docs.microsoft.com/zh-cn/windows-server/remote/remote-desktop-services/clients/remote-desktop-mac),获取 Microsoft Remote Desktop Beta。 28 | 29 | === ":fontawesome-brands-linux: Linux" 30 | 31 | Linux 没有微软官方提供的 RDP 客户端,但是经过我们测试,开源软件 Remmina 能够完美使用 Vlab 的 RDP 登录方式。 32 | 33 | 通常情况下,直接从操作系统的软件源里安装 `remmina-plugin-rdp` 即可,其他信息请参考 [Remmina 的说明](https://remmina.org/how-to-install-remmina/)。 34 | 35 | === ":fontawesome-brands-apple: iOS" 36 | 37 | 从 App Store 获取 [Microsoft Remote Desktop](https://apps.apple.com/in/app/microsoft-remote-desktop/id714464092)。 38 | 39 | === ":fontawesome-brands-android: Android" 40 | 41 | 对于 Android 7 及以下版本,请从 Google Play 安装 [Remote Desktop 8](https://play.google.com/store/apps/details?id=com.microsoft.rdc.android)。 42 | 43 | 对于 Android 8 及以上版本,请从 Google Play 安装 [Remote Desktop](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx)。 44 | 45 | ## 获取 RDP 登录信息 46 | 47 | !!! failure "尚未完成" 48 | 49 | 目前相关服务或功能尚未开放,因此本节暂时没有内容。 50 | -------------------------------------------------------------------------------- /docs/assets/css/extra.css: -------------------------------------------------------------------------------- 1 | .red, .red-important { color: red !important; } 2 | 3 | .darkred, .darkred-important { color: darkred !important; } 4 | 5 | .orangered, .orangered-important { color: orangered !important; } 6 | 7 | .green, .green-important { color: green !important; } 8 | 9 | .limegreen, .limegreen-important { color: limegreen !important; } 10 | 11 | .cyan, .cyan-important { color: cyan !important; } 12 | 13 | .darkcyan, .darkcyan-important { color: darkcyan !important; } 14 | 15 | :root { --md-code-font-family: Roboto Mono, SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace !important; } 16 | 17 | .md-typeset #references, .md-typeset .no-underline { margin-bottom: 0; padding-bottom: 0; border: none; } 18 | .md-typeset h2 { padding-bottom: 0.2em; border-bottom: 1px solid #d3d3d3; } 19 | .md-typeset h3 { padding-bottom: 0.2em; border-bottom: 1px dashed #d3d3d3; } 20 | .md-typeset h4 { font-size: 1.17em; } 21 | .md-typeset h5 { font-size: 1.08em; } 22 | .md-typeset h6 { font-size: 1em; } 23 | .md-typeset dt { font-weight: bold; } 24 | .md-typeset img { display: block; margin-left: auto; margin-right: auto; } 25 | .md-typeset .img-inline { display: inline-block; vertical-align: text-bottom; } 26 | .md-typeset .img-border { border: 1px solid black; } 27 | .md-typeset kbd { box-shadow: 0 0 0 0.05rem var(--md-default-fg-color--lighter), 0 0.1rem 0 var(--md-default-fg-color--lighter), inset 0 -0.1rem 0.2rem var(--md-default-bg-color); } 28 | .md-typeset .admonition, .md-typeset details { font-size: 0.9em; } 29 | .md-typeset .md-typeset__table { display: block; margin-left: auto; margin-right: auto; } 30 | .md-typeset .md-typeset__table > table { display: table; width: auto; margin: 0 auto; } 31 | .md-typeset p.caption { text-align: center; font-size: 0.94em; color: grey; margin: -0.7em 0 0; } 32 | .md-typeset .footnote hr { margin-top: 0.2em; } 33 | -------------------------------------------------------------------------------- /docs/file/clients.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/folder-cog-outline 3 | --- 4 | 5 | # 使用客户端软件进行文件传输 6 | 7 | Vlab 支持使用 SFTP 客户端软件进行虚拟机与本机之间的文件传输。下面介绍 FileZilla 等常见软件的使用方式。 8 | 9 | ## FileZilla {#filezilla} 10 | 11 | FileZilla 可以从其[官方网站](https://filezilla-project.org/download.php?show_all=1)获取,根据你使用的系统选择对应的下载版本,下载后的安装过程种一路点击 \[下一步\] 即可。 12 | 13 | 安装完成后找到并打开 FileZilla,可以看到如下界面: 14 | 15 | ![FileZilla-interface](../images/FileZilla-interface.png) 16 | 17 | ### 交互式登录 {#filezilla-interactive} 18 | 19 | 首先新建一个 SFTP 配置,先进入站点管理器: 20 | 21 | ![FileZilla-setup](../images/FileZilla-setup.png) 22 | 23 | 在站点管理器中点击 \[New site\] 新建一个站点,你可以为这个配置取一个容易辨别的名字,例如 `vlab`。然后是右边常规选项卡中的配置了: 24 | 25 | - 协议选择 **SFTP** 26 | - 主机为 **vlab.ustc.edu.cn**,端口为 **22**,如下图所示 27 | - 登录类型选择**交互式** 28 | - 用户可以填 **root**,也可以使用 **ubuntu** 或 **vlab**,详情参见[镜像配置](../advanced/images.md#image-content) 29 | 30 | 点击 \[连接\] 按钮的话,将会立即连接该 SFTP 站点;点击 \[确定\] 按钮的话,则保存并关闭 \[站点管理器\] 窗口。 31 | 32 | ![FileZilla-configs](../images/FileZilla-configs.png) 33 | 34 | 点击 \[连接\] 按钮后,会出现如下界面: 35 | 36 | ![FileZilla-inputpasswd](../images/FileZilla-inputpasswd.png) 37 | 38 | 按照提示依次输入 `Vlab Username`, `Vlab password` 和 `UNIX password` 即可登录(注意:输入一项要点击一次确定)。 39 | 40 | 然后可看到如下界面: 41 | 42 | ![FileZilla-login-sucess](../images/FileZilla-login-sucess.png) 43 | 44 | ### 公钥认证登录 {#filezilla-pubkey} 45 | 46 | 除了使用交互式登录,你还可以将下载到的私钥配置到 FileZilla 实现公钥免密登录。如果你还没有下载私钥,请参考[生成 SSH 密钥对并下载到本地](../login/ssh.md#get-pubkey)。 47 | 48 | 首先打开设置: 49 | 50 | ![FileZilla-pubkey-config1](../images/FileZilla-pubkey-config1.png) 51 | 52 | 然后找到 SFTP 并添加密钥文件: 53 | 54 | ![FileZilla-pubkey-config2](../images/FileZilla-pubkey-config2.png) 55 | 56 | 点击 \[确定\] 后,再找到原来保存的站点连接,即可免密登录。 57 | 58 | ### 上传本地文件到虚拟机 {#filezilla-upload} 59 | 60 | 首先在【本地站点】(也就是本地电脑)中找到并选择你要上传到虚拟机的文件或文件夹。 61 | 62 | 然后在【远程站点】(也就是虚拟机)中找到并进入你要上传文件或文件夹到的目录(即目标目录)。 63 | 64 | 在要上传的文件或文件夹上点击右键,选择【上传】即可;也可以直接把要上传的内容拖拽到右边远程站点的目录下: 65 | 66 | ![FileZilla-file-upload](../images/FileZilla-file-upload.png) 67 | 68 | ### 下载虚拟机文件到本地 {#filezilla-download} 69 | 70 | 下载虚拟机文件到本地和上传本地文件到虚拟机的操作类似,在右边远程站点选中你要下载的内容,右键点击 \[下载\] 即可,也可以直接拖拽到左边本地站点的目录下。 71 | -------------------------------------------------------------------------------- /docs/downloads.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/download 3 | --- 4 | 5 | # 资源下载 6 | 7 | ## 外部链接 8 | 9 | - Git for Windows:[GitHub Releases](https://github.com/git-for-windows/git/releases/latest) / [科大镜像站](https://mirrors.ustc.edu.cn/github-release/git-for-windows/git/LatestRelease/) / [清华大学 TUNA 镜像站](https://mirrors.tuna.tsinghua.edu.cn/github-release/git-for-windows/git/LatestRelease/) 10 | - Java 8 运行环境:[Oracle 官网](https://www.java.com/zh-CN/download/manual.jsp) 11 | - TigerVNC 客户端:[GitHub Releases](https://github.com/TigerVNC/tigervnc/releases/latest) 12 | - RealVNC 客户端:[RealVNC 官网](https://www.realvnc.com/en/connect/download/viewer/) 13 | 14 | ## 本地下载 15 | 16 | - Java 8 运行环境: 17 | [Windows 64 位](https://vlab.ustc.edu.cn/downloads/jre-8u202-windows-x64.exe) / 18 | [Mac OS X 10.7.3+](https://vlab.ustc.edu.cn/downloads/jre-8u202-macosx-x64.dmg) 19 | 20 | - Logisim (v2.7.1, 需要 Java): 21 | [Windows](https://vlab.ustc.edu.cn/downloads/logisim-win-2.7.1.exe) / 22 | [macOS 10.12+](https://vlab.ustc.edu.cn/downloads/logisim-macosx-2.7.1.tar.gz) / 23 | [Java JAR](https://vlab.ustc.edu.cn/downloads/logisim-generic-2.7.1.jar) 24 | 25 | - TigerVNC 客户端 (v1.15.0): 26 | [Windows (64 位)](https://vlab.ustc.edu.cn/downloads/vncviewer64-1.15.0.exe) / 27 | [macOS](https://vlab.ustc.edu.cn/downloads/TigerVNC-1.15.0.dmg) / 28 | [Java JAR](https://vlab.ustc.edu.cn/downloads/VncViewer-1.15.0.jar) 29 | 30 | - RealVNC 客户端 (v6.20.113): 31 | [Windows](https://vlab.ustc.edu.cn/downloads/VNC-Viewer-6.20.113-Windows.exe) / 32 | [macOS 10.12+](https://vlab.ustc.edu.cn/downloads/VNC-Viewer-6.20.113-MacOSX-x86_64.dmg) 33 | 34 | - Vivado Design Suite - HLx Editions 2016.3: 35 | [全平台](https://vlab.ustc.edu.cn/downloadsi/Xilinx_Vivado_SDK_2016.3_1011_1.tar.gz) (tar.gz 压缩包,大小 20.6 GiB) 36 | 37 | - Vivado Design Suite - HLx Editions 2019.1: 38 | [全平台](https://vlab.ustc.edu.cn/downloadsi/Xilinx_Vivado_SDK_2019.1_0524_1430.tar.gz) (tar.gz 压缩包,大小 21.4 GiB) 39 | 40 | - Vivado Design Suite - HLx Editions 2023.1: 41 | [全平台](https://vlab.ustc.edu.cn/downloadsi/Xilinx_Unified_2023.1_0507_1903.tar.gz) (tar.gz 压缩包,**大小 :warning: 110.8 GiB**) 42 | -------------------------------------------------------------------------------- /scripts/announcements.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import json 3 | import os 4 | import re 5 | import requests 6 | 7 | 8 | def get_issues(): 9 | repo = "USTC-vlab/notifications" 10 | url = f"https://api.github.com/repos/{repo}/issues?state=all" 11 | headers = {} 12 | if "GITHUB_TOKEN" in os.environ: 13 | headers["Authorization"] = f"token {os.environ['GITHUB_TOKEN']}" 14 | r = requests.get(url, headers=headers) 15 | r.raise_for_status() 16 | return r.json() 17 | 18 | 19 | def convert_time(s): 20 | t = datetime.datetime.fromisoformat(s.rstrip("Z")) 21 | t += datetime.timedelta(hours=8) 22 | return t.strftime("%Y 年 %-m 月 %-d 日 %H:%M") 23 | 24 | 25 | def print_issue(f, issue, header="!!! abstract"): 26 | print(f'{header} "[:material-github: #{issue["number"]}]({issue["html_url"]}) {issue["title"]}"\n', file=f) 27 | s = issue["body"].replace("\r", "") 28 | s = re.sub(r"\[(\d+)\]", r"[{}-\1]".format(issue["number"]), s) 29 | s = re.sub("^", " ", s, flags=re.MULTILINE) 30 | print(s, end="\n\n", file=f) 31 | ctime = convert_time(issue["created_at"]) 32 | s = f" **发布时间**:{ctime}" 33 | if issue.get("closed_at"): 34 | ctime = convert_time(issue["closed_at"]) 35 | s += f" \n **完成时间**:{ctime}" 36 | print(s, end="\n\n", file=f) 37 | 38 | 39 | def generate_md(f, data): 40 | print("---\nicon: material/bell-alert\n---\n\n# 通知公告\n", file=f) 41 | 42 | i_open = [i for i in data if i["state"] == "open"] 43 | i_closed = [i for i in data if i["state"] == "closed"] 44 | 45 | if i_open: 46 | # no header required 47 | for issue in i_open: 48 | print_issue(f, issue) 49 | else: 50 | print("当前暂无新公告。\n", file=f) 51 | 52 | if i_closed: 53 | print("## 历史公告 {#previous}\n", file=f) 54 | for issue in i_closed: 55 | print_issue(f, issue, "??? success") 56 | 57 | def main(): 58 | data = get_issues() 59 | data.sort(key=lambda i: -i["number"]) 60 | 61 | with open("docs/announcements.md", "w") as f: 62 | generate_md(f, data) 63 | 64 | 65 | if __name__ == "__main__": 66 | main() 67 | -------------------------------------------------------------------------------- /docs/web.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/wrench 3 | --- 4 | 5 | # 虚拟机管理控制台 6 | 7 | 虚拟机管理控制台是你管理虚拟机的地方。在这里你可以创建虚拟机、开关机和重启,以及查看远程连接信息。 8 | 9 | ## 登录 {#login} 10 | 11 | 在登录界面,可以使用你的学号登录,或者通过统一身份认证使用**学号**登录。 12 | 13 | ![login](images/1.png) 14 | 15 | ## 界面 {#interface} 16 | 17 | 登录后,你可以查看你账号下拥有的虚拟机。默认每个用户允许创建 1 个虚拟机。 18 | 19 | ### 设置登录密码 {#change-password} 20 | 21 | 虚拟机管理页面的右上角提供设置密码、退出登录与查看用户信息的功能,如图: 22 | 23 | ![Toolbar](images/web-settings.png){: .img-border } 24 | 25 | 通过此处设置的密码既用于登录平台管理页面(不使用统一身份认证的时候),也用于通过 VNC 和 SSH 方式登录虚拟机。 26 | 27 | ### 创建虚拟机 {#create-vm} 28 | 29 | 点击「新虚拟机」按钮,可以创建虚拟机。在创建页面中,需要输入虚拟机名称并选择镜像。 30 | 31 | ![create](images/vm-create.png) 32 | 33 | 其中: 34 | 35 | - 虚拟机名称只能由英文字母、数字、短线 (`-`) 和点 (`.`) 构成 36 | - 镜像选择中,只有含 `desktop` 的镜像包含桌面环境;不含 `desktop` 的镜像只能使用命令行登录,建议有 Linux 经验的同学选用 37 | 38 | !!! question "不知道选择哪个镜像?" 39 | 40 | 你可以参考[《虚拟机镜像》一页](advanced/images.md)。 41 | 42 | 对于大多数计算机系同学,我们推荐使用默认镜像(名称以 `vlab01` 开头)。 43 | 44 | ??? question "root 密码是什么?" 45 | 46 | 在 Linux 系统中,root 是“超级用户”,拥有系统中的所有权限。root 密码即可理解为“超级管理员密码”。 47 | 48 | 该密码仅在虚拟机中有效,适用于虚拟机内的 `su` 命令。SSH 和 VNC 登录使用平台的登录密码,SSH 也可以使用公钥登录。 49 | 50 | 点击「创建」创建虚拟机,稍等片刻即可。 51 | 52 | ### 管理虚拟机 {#manage-vm} 53 | 54 | ![vms](images/2.png) 55 | 56 | 下方的功能按钮分别为: 57 | 58 | - 开机:启动虚拟机(如果虚拟机处于关闭状态) 59 | - 关机:停止虚拟机运行 60 | - 重启:重启虚拟机(请注意在停止/重启前保存你的状态) 61 | - 桌面连接:跳转至浏览器 VNC 登录页面,见[浏览器登录](login/browser.md)页面。 62 | - 更改 root 密码:如其所述 63 | - 销毁:删除这个虚拟机。**注意这是不可逆的,所有数据都会被删除。** 64 | 65 | !!! info "提示" 66 | 67 | 「桌面连接」和「更改 root 密码」这两个按钮只在虚拟机开机时才会出现。 68 | 69 | ### 查看用户信息 {#userinfo} 70 | 71 | 点击虚拟机管理页面右上角的用户名(学工号),可以查看当前登录用户的信息。 72 | 73 | ![User Info](images/userinfo.png) 74 | 75 | 其中“有效 CAS 登录时间”是我们判断用户在校状态的重要依据。CAS 即[科大统一身份认证服务](https://passport.ustc.edu.cn/login)。 76 | 77 | !!! tip "有效 CAS 登录" 78 | 79 | 当你从登录界面通过统一身份认证登录时,我们会从统一身份认证平台获取你的在校状态信息。如果你的在校状态为“在校”,那么此次登录会被记录为“有效的 CAS 登录”。 80 | 81 | ## 使用 SSH/VNC 登录虚拟机 {#login-vm} 82 | 83 | 使用统一身份认证登录的用户,初始密码为空,因此无法使用 VNC 登录,需要[设置平台登录密码](#change-password)后方可使用 VNC 登录虚拟机。 84 | 85 | VNC 登录方式的具体操作请在左侧目录查阅各个操作系统的配置说明。 86 | 87 | !!! info "提示" 88 | 89 | SSH 方式的登录用户为 root / ubuntu / vlab,具体请参见[虚拟机镜像](advanced/images.md)。 90 | 91 | VNC 登录使用 Vlab 专有的服务,使用学号或工号与上面所述的平台密码登录。 92 | -------------------------------------------------------------------------------- /docs/login/browser.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/play-box-outline 3 | --- 4 | 5 | # 使用浏览器登录虚拟机 6 | 7 | !!! info "注意" 8 | 9 | 该登录方式只适用于名称中带有 `desktop` 的虚拟机镜像,通常为 01 到 09 号镜像。 10 | 11 | !!! success "浏览器支持" 12 | 13 | 此登录方式需要浏览器支持。以下浏览器是受支持的: 14 | 15 | - :fontawesome-brands-chrome: Google Chrome 49 或以上 16 | - :fontawesome-brands-firefox-browser: Mozilla Firefox 44 或以上 17 | - :fontawesome-brands-safari: Safari 11 或以上 18 | - :fontawesome-brands-opera: Opera 36 或以上 19 | - :fontawesome-brands-edge: Microsoft Edge 79 或以上 20 | 21 | 我们推荐最新版本的 [Microsoft Edge](https://www.microsoft.com/zh-cn/edge), [Google Chrome](https://www.google.cn/chrome/) 和 [Mozilla Firefox](https://www.mozilla.org/zh-CN/firefox/new/),它们能提供最完整的功能和最好的使用体验。 22 | 23 | **请注意,我们不支持来历不明的杂牌浏览器**。如果你正在使用该类浏览器,并且发现无法使用远程桌面连接,请点击上面其中一个链接下载最新的浏览器。不仅仅在 Vlab 上——它们在几乎所有网站里都能提供相比于你的浏览器更好的使用体验、性能与安全性。 24 | 25 | 由于技术原因,浏览器 VNC 登录与网络信息中心提供的 Web VPN 服务(wvpn.ustc.edu.cn)不兼容,尝试通过 Web VPN 登录会收到各种错误信息。请直接访问 [vlab.ustc.edu.cn](https://vlab.ustc.edu.cn/) 登录。 26 | 27 | 浏览器登录非常简单,只需要打开[虚拟机管理页面](https://vlab.ustc.edu.cn/vm/),点击相应虚拟机的 \[桌面连接\] 按钮即可。 28 | 29 | ??? info "关闭 VNC 通知" 30 | 31 | 使用 VNC 登录时会看到加入 QQ 群的通知,**我们会在该 QQ 群中发布如停机维护等重要通知**。 32 | 33 | 若你想要选择关闭 VNC 通知,可以在 [此处](https://vlab.ustc.edu.cn/vm/notif) 设置。 34 | 35 | ## 使用组合键 {#combo-keys} 36 | 37 | !!! tip "客户端更方便" 38 | 39 | [使用 Tiger 客户端](vnc.md#tigervnc)能够更方便地使用虚拟机的完整功能,因此如果你经常在虚拟机上进行复杂操作的话,我们建议你使用 TigerVNC 客户端。 40 | 41 | 在浏览器中使用组合键会受到一定限制,例如你的浏览器很可能会将 Ctrl+W 理解为“关闭当前标签”,或将 Ctrl+T 理解为“打开一个新标签”。为了能将这些组合键正确发送至虚拟机,你可以使用侧边栏提供的组合键功能,如图: 42 | 43 | ![noVNC Combo Keys](../images/novnc-combo-keys.png) 44 | 45 | 从上到下的 6 个按键分别为 ==Ctrl==, ==Alt==, ==Super==, ==Tab==, ==Esc== 和 ==Ctrl+Alt+Del== 组合键。点击它们中的一个或多个,再按键盘上的字母数字键,即可向虚拟机发送组合键。 46 | 47 | ## 使用剪贴板 {#clipboard} 48 | 49 | ### 使用自动剪贴板 {#auto-clipboard} 50 | 51 | 在 Google Chrome 及 Microsoft Edge 上可以使用自动剪贴板功能。第一次使用前请先在虚拟机内使用以下命令更新软件包: 52 | 53 | ``` 54 | sudo apt update && sudo apt upgrade 55 | ``` 56 | 57 | 接着在管理页面点击 \[桌面连接\] 按钮后,浏览器将会请求剪贴板权限,请选择允许,之后客户端系统的剪贴板和虚拟机的剪贴板将会自动同步。 58 | 如果你不想使用自动剪贴板,可以打开左侧工具栏的设置,取消勾选 `Authomatic Clipboard` 后按以下方法使用手动剪贴板。 59 | 60 | ### 使用手动剪贴板 {#manual-clipboard} 61 | 62 | 如果你使用其他浏览器,如 Mozilla Firefox 或 Safari,由于技术限制自动剪贴板将不可用,请按以下方法使用手动剪贴板: 63 | 64 | 在虚拟机中复制文字后,点击展开左侧工具栏的第二个按钮即可查看虚拟机剪贴板中的内容。 65 | 66 | ![noVNC Clipboard Utility](../images/novnc-clipboard.png){: .img-border } 67 | 68 | 如果想从主机中复制文字进虚拟机,可以将文字粘贴进左侧工具栏弹出的文本框中,即可在虚拟机中粘贴。 69 | 70 | ## 左侧工具栏说明 {#novnc-toolbar} 71 | 72 | 左侧工具栏一共有 5 个按钮,如图: 73 | 74 | ![noVNC Toolbar](../images/novnc-toolbar.png) 75 | 76 | 从上往下功能依次为: 77 | 78 | - [组合键](#combo-keys) 79 | - [剪贴板](#clipboard) 80 | - 全屏显示 81 | - 设置 82 | - 断开连接 83 | 84 | ## 桌面设置 85 | 86 | 关于一些常用的桌面设置,如 87 | 88 | - 修改 VNC 分辨率 89 | - 中文输入法 90 | 91 | 等,请参阅[桌面设置](vnc.md#desktop-settings)。 92 | -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: "Vlab @ USTC" 2 | site_description: "Vlab 实验平台使用文档" 3 | site_author: 'USTC Vlab' 4 | site_url: 'https://vlab.ustc.edu.cn/docs/' 5 | 6 | # Repository 7 | repo_name: 'USTC-vlab/docs' 8 | repo_url: 'https://github.com/USTC-vlab/docs' 9 | 10 | # Copyright 11 | copyright: 'Brought to you by Vlab and USTCLUG. Available under the CC BY-NC-ND 4.0 license.' 12 | 13 | # Configuration 14 | theme: 15 | name: 'material' 16 | language: 'zh' 17 | font: false 18 | palette: 19 | - scheme: default 20 | media: "(prefers-color-scheme: light)" 21 | primary: blue 22 | accent: blue 23 | toggle: 24 | icon: material/toggle-switch-off-outline 25 | name: 切换至深色模式 26 | - scheme: slate 27 | media: "(prefers-color-scheme: dark)" 28 | primary: light blue 29 | accent: light blue 30 | toggle: 31 | icon: material/toggle-switch 32 | name: 切换至浅色模式 33 | icon: 34 | logo: fontawesome/solid/desktop 35 | repo: octicons/mark-github-16 36 | features: 37 | - content.code.copy 38 | - content.tooltips 39 | - navigation.footer 40 | - navigation.sections 41 | 42 | # Customization 43 | extra: 44 | social: 45 | - icon: octicons/globe-16 46 | link: 'https://vlab.ustc.edu.cn/' 47 | - icon: octicons/mark-github-16 48 | link: 'https://github.com/USTC-vlab' 49 | analytics: 50 | provider: google 51 | property: G-F7H0WYZZTK 52 | 53 | extra_css: 54 | - assets/css/extra.css 55 | 56 | markdown_extensions: 57 | - admonition 58 | - attr_list 59 | - footnotes 60 | - pymdownx.details 61 | - pymdownx.emoji: 62 | emoji_index: !!python/name:material.extensions.emoji.twemoji 63 | emoji_generator: !!python/name:material.extensions.emoji.to_svg 64 | - pymdownx.highlight 65 | - pymdownx.mark 66 | - pymdownx.tabbed: 67 | alternate_style: true 68 | - pymdownx.tilde 69 | - pymdownx.superfences 70 | - markdown.extensions.def_list 71 | - toc: 72 | permalink: true 73 | 74 | nav: 75 | - 首页: / 76 | - 简介: index.md 77 | - 快速开始: quickstart.md 78 | - 虚拟机: 79 | - 虚拟机管理: web.md 80 | - 虚拟机登录: 81 | - 浏览器直接登录: login/browser.md 82 | - VNC 远程桌面登录: login/vnc.md 83 | - SSH 命令行登录: login/ssh.md 84 | - RDP 远程桌面登录: login/rdp.md 85 | - 文件传输: 86 | - 浏览器文件传输: file/filestash.md 87 | - 使用文件客户端: file/clients.md 88 | - 应用程序: 89 | - 在线 VSCode: apps/vscode.md 90 | - RISC-V 工具链: apps/riscv.md 91 | - 教程: 92 | - 本地 VSCode 远程连接 Vlab: tutorial/vscode2vlab.md 93 | - Git 简明教程: tutorial/git.md 94 | - 其他: 95 | - 常见问题: faq.md 96 | - 通知公告: announcements.md 97 | - 高级信息: 98 | - 系统资源: advanced/resources.md 99 | - 虚拟机镜像: advanced/images.md 100 | - 手动安装桌面环境: advanced/install-desktop.md 101 | - 条款: 102 | - 服务条款: terms/terms-of-service.md 103 | - 可接受的使用方式: terms/acceptable-use-policy.md 104 | - 资源下载: downloads.md 105 | - 致谢: credits.md 106 | - 招新: recruit.md 107 | -------------------------------------------------------------------------------- /docs/tutorial/git.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/git 3 | --- 4 | 5 | # Git 简明教程 6 | 7 | ## 安装 8 | 9 | - Windows 系统:从 或本站的下载页面获取 Git for Windows,按默认选项安装即可 10 | - macOS 系统:从 Homebrew 安装 11 | - Linux:从默认软件源安装即可(CentOS 7 建议从 EPEL 安装) 12 | - Debian / Ubuntu: `sudo apt-get install git` 13 | - CentOS 7: `sudo yum install epel-repo; sudo yum install git` 14 | - CentOS 8 / Fedora: `sudo dnf install git` 15 | 16 | ## Git 初步使用 17 | 18 | 注:命令前面的 `$` 表示提示符,实际操作时**不需要**输入。 19 | 20 | ### 初步配置 21 | 22 | Windows 从开始菜单找到 Git Bash 打开,可以进入 Git 命令行,其他系统直接打开终端。首先配置 Git 的名称和邮箱(必须): 23 | 24 | ```shell 25 | $ git config --global user.name "Jon Doe" 26 | $ git config --global user.email "email@example.com" 27 | ``` 28 | 29 | 其他操作系统类似。 30 | 31 | ### 创建项目仓库 32 | 33 | ```shell 34 | $ mkdir learngit 35 | $ cd learngit 36 | $ pwd 37 | /Users/tao/learngit 38 | $ git init 39 | ``` 40 | 41 | 这样你的 Git 版本库就创建好了,接下来就是使用 Git 工作了。 42 | 43 | ### 提交文件 44 | 45 | 在 `learngit` 目录中放入一个文件(可以自己新建然后写一些内容,也可以是复制粘贴过来),例如 `readme.txt` 46 | 47 | 文件的提交: 48 | 49 | - 第一步:`git add readme.txt` 50 | - 第二步:`git commit -m "wrote a readme file"` 51 | (引号里的内容是本次提交的说明,以便下次你就可以看说明就知道你这次提交做了什么) 52 | 53 | 然后你可以继续修改你的文件,如增删单词等。 54 | 55 | 输入以下命令查看仓库状态(任何时候都可以查看,要经常使用) 56 | 57 | ```shell 58 | $ git status 59 | ``` 60 | 61 | 输入以下命令查看即将提交的修改内容 62 | 63 | ```shell 64 | $ git diff readme.txt 65 | ``` 66 | 67 | 修改完后就可以提交了,同样是两步 `git add` 和 `git commit` 68 | 69 | ### 版本回退 70 | 71 | 可以返回到任意一个你所提交过的版本 72 | 73 | ```shell 74 | $ git log # 查看提交日志 75 | $ git reset --hard HEAD~ # 一个 ~ 表示退回一次提交,也可以用 HEAD~n 直接退回 n 次提交 76 | ``` 77 | 78 | 也可以直接退回到指定的版本:`git reset --hard 1094a`,后面为版本号(至少)前四位,版本号可以在 `git log` 中查看 79 | 80 | ### 查看文件内容 81 | 82 | ``` 83 | $ cat readme.txt 84 | ``` 85 | 86 | 或者更友好的查看方式: 87 | 88 | ```shell 89 | $ less readme.txt 90 | ``` 91 | 92 | 按 Q 可以退出 less 查看器。 93 | 94 | ### 撤销修改 95 | 96 | `git checkout -- readme.txt` 可以让文件回到上一次提交时状态 97 | 98 | `git reset readme.txt` 撤销暂存区的修改,即撤销 `git add` 的作用(具体用法与暂存区深度理解查看文末链接) 99 | 100 | ### 删除文件 101 | 102 | ```shell 103 | $ git rm test.txt 104 | $ git commit -m "remove test.txt" 105 | ``` 106 | 107 | ## 远程仓库 108 | 109 | 首先你要有个远程仓库,如果你还没有,可以选择在 [GitHub](https://github.com) 或者[科大超算中心 GitLab](https://git.ustc.edu.cn) 上注册账号。 110 | 111 | ### 关联到本地 112 | 113 | - 第一步:生成一对 SSH 密钥。在 Git 命令行中输入以下内容(邮箱替换成你自己的) 114 | 115 | ```shell 116 | $ ssh-keygen -C email@example.com 117 | ``` 118 | 119 | 一路回车,一般不需要设置密码 120 | 121 | - 第二步:在用户主目录下找到 `.ssh` 文件夹,打开里面的 `id_rsa.pub` 文件(可以用记事本打开),复制里面内容,以 `ssh-rsa` 开头的一行字 122 | 123 | 登录 GitHub 或 GitLab,点击右上角头像,选择 Settings → SSH Keys 页面 124 | 125 | 点 Add SSH Key,填上任意 Title(方便自己辨认),在 Key 文本框里粘贴 `id_rsa.pub` 文件的内容即可 126 | 127 | ![image](../images/github-add-ssh-key.png) 128 | 129 | 确认 SSH 密钥添加成功:`ssh -T git@github.com`(这里和下面的内容都以 GitHub 为例子,如果使用其他服务,`github.com` 需要修改为对应的域名),如果看到你的用户名提示认证成功,那么这一步就配置完成了。 130 | 131 | ### 添加远程库 132 | 133 | 登录 GitHub,左上角 Repositories 处点击绿色的 New 按钮,仓库名填 `learngit`(也可以自己重新起,后面保持同步),其他默认,点击创建完成。 134 | 135 | 输入以下命令(`username` 换成你自己的用户名): 136 | 137 | ```shell 138 | $ git remote add origin git@github.com:username/learngit.git 139 | ``` 140 | 141 | 删除关联的操作:`git remote remove origin` 142 | 143 | 推送本地内容到远程库: 144 | 145 | - 初次推送:`git push -u origin master` 146 | - 后面推送就简单了:`git push` 147 | 148 | 将远程库同步到本地:`git pull` 149 | 150 | --- 151 | 152 | 至此,Git 基本用法已经简单介绍完了,深入学习请看以下链接 153 | 154 | ## 更多阅读 155 | 156 | - 157 | - [Git for beginners: The definitive practical guide (Stack Overflow)](https://stackoverflow.com/q/315911/5958455) 158 | -------------------------------------------------------------------------------- /docs/apps/vscode.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/microsoft-visual-studio-code 3 | --- 4 | 5 | # 在线 Visual Studio Code 6 | 7 | Vlab 提供了可以直接在浏览器里使用的 :material-microsoft-visual-studio-code: Visual Studio Code。 8 | 9 | !!! info "注意" 10 | 11 | 此网页版 VSCode 通过部署在虚拟机内的开源软件 [code-server](https://github.com/coder/code-server) 实现,因此与独立的 VSCode 有一些不同之处,尤其在扩展支持方面。 12 | 13 | 如果你想要使用 VSCode 的完整功能,**我们推荐你在电脑上安装 VSCode,并通过 [Remote SSH][vscode-ssh] 扩展连接到 Vlab 虚拟机**。 14 | 15 | [vscode-ssh]: https://code.visualstudio.com/docs/remote/ssh 16 | 17 | ## 启用 VSCode 服务 {#enable-server} 18 | 19 | 在使用前需要在你的虚拟机里激活 VSCode 的服务端程序。 20 | 21 | 打开终端,输入 `vscode start` 即可,同时这会将 VSCode 服务设为开机自动启动,使得你下次可以直接使用 VSCode 而无需重新操作命令行。 22 | 23 | !!! question "找不到命令 vscode" 24 | 25 | 若提示找不到 `vscode` 命令,请尝试使用完整路径 `/opt/vlab/bin/vscode`。 26 | 27 | 若完整路径也不存在,或你的虚拟机里没有 `/opt/vlab`,请联系我们以获得支持。 28 | 29 | 若你想要停止 VSCode 服务,请使用 `vscode stop`,同时这会取消 VSCode 服务的开机自动启动。 30 | 31 | 其他命令: 32 | 33 | - `vscode restart` 可以重启 VSCode 服务,但不会改变它的开机自启状态 34 | - `vscode disable` 将完全删除 VSCode 服务。你在使用过程中产生的数据将会保留。 35 | 36 | !!! warning "如果正在使用无桌面的镜像" 37 | 38 | 此时可能会发现,断开 SSH 连接后 VSCode 服务也会关闭。该问题与 Systemd 处理用户服务的方式有关,解决方法为在 root 用户下执行: 39 | 40 | ```shell 41 | loginctl enable-linger 用户名 42 | ``` 43 | 44 | 以设置在 session 全部关闭的情况下仍然保留用户服务。 45 | 46 | ## 使用 VSCode {#usage} 47 | 48 | 在启用 VSCode 服务后,在虚拟机管理页面点击对应虚拟机的 **VSCode** 按钮即可跳转进入使用,如图所示: 49 | 50 | ![Use VSCode for this VM](../images/apps-vscode-entry.png) 51 | 52 | ## 修改显示语言 {#change-language} 53 | 54 | VSCode 默认语言为英语,若要使用中文语言,请在左侧扩展市场(Extensions Marketplace)搜索 Language,并安装中文语言包(ID 为 `ms-ceintl.vscode-language-pack-zh-hans`) 55 | 56 | ![Change display language for VSCode](../images/apps-vscode-locale.png){: .img-border} 57 | 58 | 然后,打开终端,向 `~/.config/Code/User/locale.json` 中写入 `{"locale":"zh-cn"}`,如图所示: 59 | 60 | ![Change display language for VSCode](../images/apps-vscode-locale-2.png){: .img-border} 61 | 62 | 刷新浏览器即可看到 VSCode 已切换至中文。 63 | 64 | 若要换回英语,删除刚才创建的 `locale.json` 文件,再刷新即可。 65 | 66 | ## 扩展 {#extension} 67 | 68 | 网页端 VSCode (code-server) 不支持一部分的扩展,这些扩展在安装时会产生如下提示: 69 | 70 | !!! bug "" 71 | 72 | The '<name>' extension is not available in code-server for the Web. Click 'More Information' to learn more. 73 | 74 | ### 自行安装 VSIX 扩展 {#vsix} 75 | 76 | 点击左侧 Extensions,在小标题 "Extensions Marketplace" 的右侧有 :material-dots-horizontal: 图标,点击后选择 "Install from VSIX..."。 77 | 78 | 注意:你需要提前下载好扩展的 VSIX 文件到远程的虚拟机中。 79 | 80 | ### Python {#python} 81 | 82 | [Pylance 扩展不支持非微软构建的 VSCode](https://github.com/microsoft/pylance-release/issues/135),这包括了我们提供的网页端 VSCode。 83 | 如果安装了 Pylance,可能会发现 Python 扩展功能异常。需要关闭 Pylance,切换为 Jedi 语言服务器。 84 | 85 | ### PDF 阅读 {#pdf} 86 | 87 | 最流行的 PDF 阅读扩展 [vscode-pdf][vscode-pdf] 因为其代码设置原因不支持网页端 VSCode,我们提供了一份[修改后的版本](https://vlab.ustc.edu.cn/downloads/pdf-1.2.2.vsix)。 88 | 89 | 可以使用以下命令下载,然后按照上文的步骤安装: 90 | 91 | ```shell 92 | # 回到家目录 93 | cd 94 | wget https://vlab.ustc.edu.cn/downloads/pdf-1.2.2.vsix 95 | ``` 96 | 97 | 请注意,LaTeX Workshop 也提供了一套 PDF 阅读器,但是其实现在网页端存在问题,导致显示包含中文的 LaTeX 编译的 PDF 时可能无法显示字符。 98 | 如有需要,建议手动右键点击对应 PDF 文件,选择 Open With → PDF Preview,并忽略 LaTeX Workshop 显示的不兼容提示。 99 | 由于 [LaTeX Workshop 官方声明不对 code-server 提供支持](https://github.com/James-Yu/LaTeX-Workshop/wiki/FAQ#code-server-is-not-supported),我们无法将对应的修复代码提交给上游扩展。 100 | 101 | ??? tip "如果仍然希望使用 LaTeX Workshop 的 PDF 阅读器" 102 | 103 | 手动编辑 `~/.config/Code/extensions/james-yu.latex-workshop-9.13.4-universal/out/viewer/latexworkshop.js` 文件(该路径可能跟随该扩展版本更新变化),将 `cMapUrl: '/cmaps/',` 修改为 `cMapUrl: '../cmaps/',`。 104 | 105 | [vscode-pdf]: https://marketplace.visualstudio.com/items?itemName=tomoki1207.pdf -------------------------------------------------------------------------------- /docs/advanced/images.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/tape-drive 3 | --- 4 | 5 | # 虚拟机镜像 6 | 7 | 镜像是虚拟机的模板,包含了完整的虚拟机操作系统。不同的镜像包含的不同的操作系统配置(例如 Ubuntu, Debian 或者 CentOS),不同的操作系统在使用过程中也会有一些不同,请根据自己的实际需求选择。 8 | 9 | ## 虚拟机类型选择 {#vm-selection} 10 | 11 | Vlab 提供的默认虚拟机类型为 Linux LXC,基于 Linux 容器技术实现,拥有最好的性能,能够使用 Vlab 实验软件套装进行多种课程实验,也能够使用 Docker,适合大多数同学使用。但是由于虚拟化技术限制,LXC 虚拟机无法使用文件系统挂载、回环设备(loop device)、内核模块等 Linux 高级特性,但你可以在其中使用 `qemu-system-x86-64` 嵌套运行 KVM 虚拟机。 12 | 13 | Linux KVM 是完整的虚拟机,能够根据需要使用任意的 Linux 内核,也能够使用回环设备和运行嵌套 KVM 虚拟机(如 `qemu-system`)等《操作系统》课程必需的 Linux 高级特性。但是由于虚拟化技术限制,KVM 虚拟机没有 Vlab 实验软件套装,你可以自行安装你需要的实验软件,但是它们将会占用硬盘空间。 14 | 15 | !!! failure "Windows KVM 虚拟机暂未开放" 16 | 17 | 由于 Windows 的系统设计与 Linux 完全不同,我们无法为 Windows 提供任何技术支持。 18 | 19 | ??? example "虚拟机功能比较" 20 | 21 | | 功能特性 | Linux LXC | Linux KVM | Windows KVM | 22 | | :------: | :------: | :------: | :------: | 23 | | [使用 VNC 登录](../login/vnc.md) | :fontawesome-solid-check:{: .limegreen } | :fontawesome-solid-xmark:{: .orangered } | :fontawesome-solid-xmark:{: .orangered } | 24 | | [使用 SSH 登录](../login/ssh.md) | :fontawesome-solid-check:{: .limegreen } | :fontawesome-solid-check:{: .limegreen } | :fontawesome-solid-xmark:{: .orangered } | 25 | | [使用 RDP 登录](../login/rdp.md) | :fontawesome-solid-xmark:{: .orangered } | :fontawesome-solid-xmark:{: .orangered } | :fontawesome-solid-check:{: .limegreen } | 26 | | Vlab 实验软件套装 | :fontawesome-solid-check:{: .limegreen } | :fontawesome-solid-xmark:{: .orangered } | :fontawesome-solid-xmark:{: .orangered } | 27 | | Linux 高级特性 | :fontawesome-solid-xmark:{: .orangered } | :fontawesome-solid-check:{: .limegreen } | :fontawesome-solid-xmark:{: .orangered } | 28 | | 技术支持 | :fontawesome-solid-question:{: .darkcyan } | :fontawesome-solid-question:{: .darkcyan } | :fontawesome-solid-xmark:{: .orangered } | 29 | 30 | ## 镜像选择 {#image-selection} 31 | 32 | 名称中带有 `desktop` 的 LXC 镜像包含了桌面环境,可以使用我们提供的 VNC 登录方式;名称中不含 `desktop` 的 LXC 镜像和 KVM 镜像则无法使用 VNC 方式登录,可以使用 SSH 命令行统一登录接口。具体登录方式请在左侧根据你的环境查看相应的文档。 33 | 34 | !!! info "系统默认用户" 35 | 36 | 预装桌面环境的镜像默认用户为 ubuntu 或 vlab(无密码,见下方表格),而不带桌面环境的镜像只有初始的 root 用户,可以通过 SSH 登录后自行添加更多用户。 37 | 38 | 名称中的 `ubuntu`, `debian`, `centos` 等表示该镜像构建时基于的 [Linux 发行版](https://zh.wikipedia.org/zh-hans/Linux%E5%8F%91%E8%A1%8C%E7%89%88)。如果你对 Linux 不熟悉的话,可以参考校 Linux 用户协会的 [Linux 101 课程讲义](https://101.lug.ustc.edu.cn/)或网上的其他教程。 39 | 40 | 对于大多数同学来说,我们建议你选择默认的镜像(名称以 `vlab01` 开头,即编号为 01 的镜像),我们提供了计算机系本科学习实验所需要的必备软件(如 Xilinx Vivado),可以为你省去自己安装配置这些软件的负担,且这些软件不占用你的虚拟机存储空间。同时,**由于维护精力问题,目前只能保证 01 号和 200 号镜像活跃维护,使用其他镜像可能会遇到更多的问题,相关问题请联系我们以反馈**。 41 | 42 | !!! info "支持期限" 43 | 44 | Ubuntu LTS 版本每两年发布一个新版本,Ubuntu 官方对每个 LTS 提供了五年的支持期限。对于已经超出支持期限以内的镜像(如 18.04),我们可能会保留一段时间,但是不会对运行过期系统版本的虚拟机提供任何有效的支持。 45 | 46 | ### LXC 镜像一览 {#image-content} 47 | 48 | | 镜像编号 | 系统版本 | 默认用户 | 桌面环境 | 备注 | 49 | | :------: | :------: | :------: | :------: | :------: | 50 | | 01 | Ubuntu 24.04 | root/ubuntu | MATE | | 51 | | 02 | Ubuntu 22.04 | root/ubuntu | MATE | | 52 | | 13 | Debian 12 | root/vlab | 无 | | 53 | | 20 | Ubuntu 20.04 | root/ubuntu | MATE | 「量化金融工程」课程专用 | 54 | | 21 | Ubuntu 22.04 | root/ubuntu | MATE | 「计算系统综合实验」课程专用 | 55 | | 90-99 | 测试版本,请勿使用 | root | 无 | | 56 | 57 | #### Vlab 实验软件 {#vlab-software} 58 | 59 | LXC 虚拟机可以使用通过 `/opt/vlab` 提供的以下实验软件,并会随时增加或更新: 60 | 61 | - Xilinx Vivado 2023.1 62 | - Xilinx Vivado 2019.1 63 | - Xilinx Vivado 2016.3 64 | - MATLAB R2019a 65 | - Wolfram Mathematica 12.3 66 | - [网页版 Visual Studio Code](../apps/vscode.md) 67 | - TeX Live 2020 68 | - [Logisim](http://www.cburch.com/logisim/) 69 | - Typora 70 | - Verilator 5.014 71 | - [RARS 模拟器](../apps/riscv.md) 72 | - RISC-V GCC 工具链 73 | - RISC-V 64 GCC 工具链 74 | 75 | 如果需要使用其他发行版(诸如 Fedora, CentOS)执行软件,建议使用 `docker`(`sudo apt install docker.io`)。 76 | 77 | ### KVM 镜像一览 {#vm-content} 78 | 79 | | 镜像编号 | 系统版本 | 默认用户 | 80 | | :------: | :------: | :------: | 81 | | 200 | Ubuntu 22.04 | root/vlab | 82 | -------------------------------------------------------------------------------- /docs/login/vnc.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/television-play 3 | --- 4 | 5 | # 通过 VNC 远程桌面登录虚拟机 6 | 7 | !!! example "支持的虚拟机和客户端" 8 | 9 | VNC 登录方式仅支持 Linux LXC 虚拟机,这也是 Vlab 提供的默认虚拟机类型。 10 | 11 | VNC 登录方式支持从[浏览器直接登录](browser.md),也支持包括 Windows, macOS, Linux, iOS 和 Android 在内的客户端系统。 12 | 13 | !!! info "注意" 14 | 15 | 该登录方式只适用于名称中带有 `desktop` 的虚拟机镜像。 16 | 17 | ## 在浏览器中直接登录 {#browser} 18 | 19 | 请移步至[浏览器直接登录](browser.md)一页。 20 | 21 | ## 使用 TigerVNC 登录(推荐) {#tigervnc} 22 | 23 | ??? question "无法使用 TigerVNC 连接到虚拟机?" 24 | 25 | 如果你无法使用 TigerVNC 连接到虚拟机,请在连接界面选择 "Options...",在 Security 下取消选择 RSA-AES,如图所示: 26 | 27 | ![TigerVNC disable RSA-AES](../images/tigervnc-security.png) 28 | 29 | 连接到 Vlab 的 VNC 流量会使用 TLS 加密,因此取消 RSA-AES 不会影响安全性。 30 | 31 | ??? tip "客户端下载" 32 | 33 | * Windows,macOS 和 Linux:[:fontawesome-brands-github: GitHub](https://github.com/TigerVNC/tigervnc/releases/latest) 34 | 35 | * Ubuntu 和 Debian:`sudo apt-get install tigervnc-viewer` 36 | 37 | * CentOS, Fedora 和 RHEL:`sudo yum install tigervnc` 38 | 39 | * Arch Linux 和 Manjaro:`sudo pacman -S tigervnc` 40 | 41 | === ":fontawesome-brands-windows: Windows" 42 | 43 | 以 Windows 10 系统为例,[下载 TigerVNC 客户端](https://vlab.ustc.edu.cn/downloads/vncviewer64-1.11.0.exe),如图: 44 | 45 | ![TigerVNC Viewer Icon](../images/tigervnc-win-icon.png){: .img-border } 46 | 47 | 在服务器地址处填入 `vlab.ustc.edu.cn`,并点击 **Connect**: 48 | 49 | ![TigerVNC Connection Info](../images/tigervnc-connection-win10.png) 50 | 51 | 这里提示要输入用户名和密码,输入学号(或工号)和网页平台的登录密码: 52 | 53 | ![TigerVNC Authentication Dialog](../images/tigervnc-authentication-win10.png) 54 | 55 | 登录后即可看到桌面并开始使用。 56 | 57 | === ":fontawesome-brands-apple: macOS" 58 | 59 | [下载 macOS 下的 TigerVNC 客户端](https://vlab.ustc.edu.cn/downloads/TigerVNC-1.11.0.dmg)并安装(与安装其他的应用一样,打开 dmg 文件并将应用拖动到 Application 目录即可)。 60 | 61 | 打开 TigerVNC 客户端,如图所示输入 `vlab.ustc.edu.cn`,点击 `Connect`。 62 | 63 | ![TigerVNC Main Screen](../images/tigervnc-startup-macos.png) 64 | 65 | 这里提示要输入用户名和密码,输入学号(或工号)和网页平台的登录密码即可登录: 66 | 67 | ![TigerVNC Authentication Dialog](../images/tigervnc-authentication-macos.png) 68 | 69 | 登录后即可看到桌面并开始使用。 70 | 71 | === ":fontawesome-brands-linux: Linux" 72 | 73 | Linux 系统可以从 GitHub 下载通用型客户端(格式为 `.tar.gz`),也可以从各大发行版的软件源直接获取。 74 | 75 | * Ubuntu 和 Debian:`sudo apt-get install tigervnc-viewer` 76 | 77 | * CentOS 和 Fedora:`sudo yum install tigervnc` 78 | 79 | * Arch Linux 和 Manjaro:`sudo pacman -S tigervnc` 80 | 81 | 其界面和操作与 macOS 相同,请参考 macOS 的使用说明。 82 | 83 | === ":fontawesome-brands-apple: iOS / :fontawesome-brands-android: Android" 84 | 85 | TigerVNC 没有 iOS 和 Android 的客户端,请移步至下方 [RealVNC](#realvnc) 的使用说明。 86 | 87 | !!! question "拥有多个虚拟机?" 88 | 89 | 如果你拥有多个虚拟机,登录时请输入 `学号:虚拟机编号` 的形式,例如 `PB17000000:1234`。 90 | 91 | !!! question "密码是什么?" 92 | 93 | VNC 登录方式使用 Vlab 平台的登录密码。[还没设置?](../web.md#change-password) 94 | 95 | ## 使用 RealVNC 客户端登录 {#realvnc} 96 | 97 | ??? tip "客户端下载" 98 | 99 | 在 [RealVNC 官网][realvnc-all]选择你的系统平台,点击 **Download VNC Viewer** 即可下载,如图: 100 | 101 | ![RealVNC Download Page](../images/realvnc-download.png){: .img-border } 102 | 103 | 另外,iOS 设备可以从 [:fontawesome-brands-app-store-ios: App Store][realvnc-ios] 获取 VNC Viewer,Android 设备可以从 [:fontawesome-brands-google-play: Google Play][realvnc-android] 或其他应用商店获取 VNC Viewer。 104 | 105 | [realvnc-all]: https://www.realvnc.com/en/connect/download/viewer/ 106 | [realvnc-ios]: https://apps.apple.com/us/app/vnc-viewer-remote-desktop/id352019548 107 | [realvnc-android]: https://play.google.com/store/apps/details?id=com.realvnc.viewer.android 108 | 109 | === ":fontawesome-brands-windows: Windows" 110 | 111 | 以 Windows 10 系统为例,[下载 RealVNC 客户端](https://www.realvnc.com/en/connect/download/viewer/windows/)并安装。安装好后在开始菜单中找到 RealVNC 的图标,如下图所示: 112 | 113 | ![RealVNC in Windows 10 Start Menu](../images/realvnc-win10-tile.png) 114 | 115 | 打开后的主界面如图所示,在地址栏输入 `vlab.ustc.edu.cn`,按回车连接: 116 | 117 | ![RealVNC Main Screen](../images/realvnc-main-screen-win10.png) 118 | 119 | 与 TigerVNC 相同,输入学号(或工号)和网页平台的登录密码即可登录: 120 | 121 | ![RealVNC Authentication Dialog](../images/realvnc-auth-screen-win10.png) 122 | 123 | === ":fontawesome-brands-apple: macOS" 124 | 125 | 下载 macOS 下的 [RealVNC 客户端](https://www.realvnc.com/en/connect/download/viewer/macos/)并安装(与安装其他的应用一样,打开 dmg 文件并将应用拖动到 Application 目录即可)。 126 | 127 | 打开 VNC Viewer,打开后的主界面如图所示,在地址栏输入 `vlab.ustc.edu.cn`,按回车连接: 128 | 129 | ![RealVNC Main Screen](../images/realvnc-main-screen-macos.png) 130 | 131 | 如果出现以下画面,选择 **Continue**。 132 | 133 | ![RealVNC Server not recognized](../images/realvnc-auth-warning-macos.png) 134 | 135 | 与 TigerVNC 相同,输入学号(或工号)和网页平台的登录密码即可登录: 136 | 137 | ![RealVNC Authentication Dialog](../images/realvnc-auth-screen-macos.png) 138 | 139 | === ":fontawesome-brands-linux: Linux" 140 | 141 | 根据发行版的不同,选择 DEB,RPM 格式或 Standalone 版的 [RealVNC 客户端](https://www.realvnc.com/en/connect/download/viewer/linux/),并使用操作系统的包管理器安装(Standalone 版不需要安装)。 142 | 143 | Linux 客户端的界面和操作与 macOS 相同,请参考 macOS 的使用说明。 144 | 145 | === ":fontawesome-brands-apple: iOS / :fontawesome-brands-android: Android" 146 | 147 | 从 [:fontawesome-brands-app-store-ios: App Store][realvnc-ios]、[:fontawesome-brands-google-play: Google Play][realvnc-android] 或其他应用商店获取 VNC Viewer。 148 | 149 | 打开 VNC Viewer 应用,添加服务器,在 Address 处输入 `vlab.ustc.edu.cn`,并填写一个可以辨认的名称(如 Vlab),然后点击刚刚新建的项目即可连接。 150 | 151 | 登录信息和提示等请参考 macOS 的使用说明。 152 | 153 | ## 桌面设置 {#desktop-settings} 154 | 155 | ### 修改分辨率 {#change-resolution} 156 | 157 | !!! tip "提示" 158 | 159 | 更高的分辨率需要更快的网速,若网速不够,VNC 会自动降低显示质量(分辨率不变,颜色深度降低),可能会影响显示效果。建议根据自己的使用环境选择合适的分辨率。 160 | 161 | 默认的桌面分辨率为 1024×768,适合大多数人使用。 162 | 163 | !!! tip "提示" 164 | 165 | TigerVNC 客户端默认会根据窗口大小自动修改分辨率。 166 | 167 | 使用网页登录的用户可以选择 noVNC 左侧齿轮,设置 Scaling Mode 为 Remote Resizing 以启动自动调整分辨率的功能;另一个 Local Scaling 选项仅会直接拉伸显示,不会自动调整分辨率。 168 | 169 | ![Choose scaling in noVNC](../images/novnc-scaling.png) 170 | 171 | 对于 Ubuntu 18.04 Xfce4 老镜像,如果你需要修改分辨率,可以在左上角找到 **设置 → 显示**,如图: 172 | 173 | ![Set VNC resolution (Xfce)](../images/vnc-change-resolution-xfce.png) 174 | 175 | 对于 Ubuntu 20.04 及以上的 MATE 镜像,可以在菜单栏找到 **系统 → 硬件 → 显示器** 调整分辨率。 176 | 177 | ![Set VNC resolution (MATE)](../images/vnc-change-resolution-mate.png) 178 | 179 | 调整分辨率后,一部分较老创建的虚拟机可能会出现托盘位置显示异常的问题。请在对应位置点击右键,取消「锁定到面板」后再次右键,点击「移动」,将鼠标移动到最右侧后点击确认即可。 180 | 181 | ### 设置中文输入法 {#chinese-ime} 182 | 183 | !!! success "虚拟机已默认启用中文输入法" 184 | 185 | 系统自带的输入法为 IBus,可以手动启用中文输入。在左上角找到 Applications → Settings → IBus Preferences 设置: 186 | 187 | ![Menu - IBus Preferences](../images/menu-ibus-settings.png) 188 | 189 | 在 Input Method 选项卡点 Add,然后在 Chinese 里找到 Pinyin,再次点击右下角的 Add 即可: 190 | 191 | ![IBus Preferences - Add Chinese Pinyin](../images/ibus-add-pinyin.png) 192 | 193 | 添加成功后可以在右上角切换中文与英文输入法,也可以按 Shift 键在中文输入法中切换中英文输入。 194 | -------------------------------------------------------------------------------- /docs/faq.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/chat-question-outline 3 | --- 4 | 5 | # 常见问题 6 | 7 | ## 虚拟机管理 {#vm-management} 8 | 9 | 是否会关闭/回收虚拟机? 10 | 11 | : **Vlab 平台可能会不定期关闭超过一个月未登录的虚拟机,并在一年内至少会回收一次已离校(判断方法为 CAS 有效登录时间距今超过半年)的用户的虚拟机**。如果你需要长期开启虚拟机,请联系 Vlab 管理员。 12 | 13 | ## 连接问题 {#connection} 14 | 15 | 虚拟机无法连接 16 | 17 | : 请检查以下项目: 18 | 19 | - 虚拟机是否已开机?(新创建的虚拟机初始状态为关机状态) 20 | - 虚拟机创建时是否选择了带有桌面环境的镜像?(01~09 号镜像都带有桌面环境) 21 | 22 | 下面的问题只会在使用 VNC 客户端登录时遇到: 23 | 24 | - 你所在的网络可能屏蔽了 5900 端口(VNC 协议的标准端口),请尝试使用 449 端口,即在服务器地址处填入 `vlab.ustc.edu.cn:449`。如果很不幸两个端口都被屏蔽了,请使用浏览器登录。 25 | 26 | 虚拟机连接时提示密码错误 27 | 28 | : 远程桌面连接方式使用 [Vlab 平台的登录密码](web.md#change-password),而不是虚拟机内的密码。 29 | 30 | 使用网络信息中心的 Web VPN 访问桌面登录页面 noVNC 时显示 noVNC encountered an error 31 | 32 | : 报错信息如下: 33 | 34 | !!! bug "" 35 | 36 | SyntaxError: import declarations may only appear at top level of a module 37 | 38 | 请直接访问 [vlab.ustc.edu.cn](https://vlab.ustc.edu.cn/),网页版桌面登录不兼容 Web VPN。 39 | 40 | 希望关闭/重新打开 VNC 连接时显示的通知 41 | 42 | : [Vlab VNC 通知设置页](https://vlab.ustc.edu.cn/vm/notif) 可以设置是否显示 VNC 通知。关闭前请务必加入我们的聊天群组,以及时获取通知。 43 | 44 | SSH 连接提示 `sign_and_send_pubkey: no mutual signature supported` 45 | 46 | : 该错误主要在 OpenSSH 8.8 及以上的客户端中出现,原因是 OpenSSH 8.8 默认取消了使用 RSA 公钥连接时的 `ssh-rsa` 签名算法。 47 | 48 | !!! info "该问题已于 2022-08-08 完整修复" 49 | 50 | 目前 SSH 网关程序已支持更新的 RSA 签名算法。用户无需进行以下操作。 51 | 52 | 在收到反馈后,我们已更新 01 号镜像。若你的虚拟机编号大于 2267,那么你不需要进行处理。 53 | 54 | 请编辑 `$HOME/.ssh/config` 文件(Windows 用户请编辑 `%UserProfile%\.ssh\config`),添加以下内容恢复 OpenSSH 的选项: 55 | 56 | ```text 57 | Host * 58 | PubkeyAcceptedKeyTypes +ssh-rsa 59 | ``` 60 | 61 | Ubuntu 18.04 更新软件包后无法连接桌面 62 | 63 | : ~~目前确认我们推送的 vlab-vnc 剪贴板相关更新会导致 VNC 启动失败~~。最新版本的 vlab-vnc 包已经对 Ubuntu 18.04 的情况特殊处理,更新即可。 64 | 65 | 需要编辑 `/etc/vlab/vncserver-lightdm` 文件,将 Xvnc 对应行中 SendPrimary 参数删去,保存文件后等待片刻即可重新连接。 66 | 67 | Ubuntu 18.04 即将在 2023 年结束支持,我们建议仍在使用 Ubuntu 18.04 用户备份数据后创建更新版本 Ubuntu 的虚拟机。 68 | 69 | 在运行需要大量使用内存的程序后无法连接 70 | 71 | : 此时可尝试关机(重启失败的概率较大),然后重新开启虚拟机。如果需要更多的内存,请参考[额外功能](advanced/resources.md)联系 Vlab 管理员。 72 | 73 | 此外,在最新的 22.04 的镜像中,我们包含了经过配置的 `earlyoom` 包,可以在系统内存不足时自动杀死占用内存较多的进程,并且在允许的情况下在终端和桌面上显示提示,预计可以有效地缓解此类问题。使用基于较早的镜像的虚拟机的用户可以安装 `vlab-earlyoom`: 74 | 75 | ```sh 76 | sudo apt update 77 | sudo apt install vlab-earlyoom 78 | ``` 79 | 80 | !!! warning "Ubuntu 22.04 镜像的更新提示" 81 | 82 | 我们发现之前发布的 22.04 的镜像中 `earlyoom` 的通知配置不正确,并于 2023-04-10 修复。对于在该日期及之前创建虚拟机的用户,需要升级以修复: 83 | 84 | ```sh 85 | sudo apt update 86 | sudo apt install --only-upgrade vlab-earlyoom # 或者执行 apt full-upgrade 进行完整升级 87 | ``` 88 | 89 | 在更新后,界面显示效果类似如下: 90 | 91 | ![earlyoom](images/earlyoom.png) 92 | 93 | ## 软件问题 {#software} 94 | 95 | ### Vivado 仿真报错 {#s-vivado-xsim-error} 96 | 97 | 表现症状 98 | 99 | : 尝试使用 Vivado 仿真时很快出现以下错误信息: 100 | 101 | !!! bug "" 102 | 103 | ERROR: [XSIM 43-3409] Failed to compile generated C file xsim.dir/test_behav/obj/xsim_1.c. 104 | 105 | 解决方法 106 | 107 | : 打开终端,按顺序输入如下两条命令 108 | 109 | ```shell 110 | sudo apt update 111 | sudo apt install build-essential libncurses5 112 | ``` 113 | 114 | !!! info "新虚拟机不会出现此问题" 115 | 116 | 在收到反馈后,我们已更新 01 号镜像。若你的虚拟机编号大于 2267,那么你不需要进行处理。 117 | 118 | ### 在线 VSCode 启动出现「只读变量」错误 {#s-vscode-read-only-variable} 119 | 120 | 表现症状 121 | 122 | : 在终端中执行 `vscode` 时提示以下错误信息: 123 | 124 | !!! bug "" 125 | 126 | /opt/vlab/bin/vscode: 行 4: UID:只读变量 127 | 128 | 解决方法 129 | 130 | : 打开终端,输入 `sudo dpkg-reconfigure dash`。在弹出的 "Use dash as the default system shell (/bin/sh)?" 中选择 Yes。 131 | 132 | ### `ping` 命令无法在普通用户下使用 {#s-ping-permission-denied} 133 | 134 | 表现症状 135 | 136 | : 在终端中执行 `ping` 命令时提示以下错误信息: 137 | 138 | !!! bug "" 139 | 140 | ping: icmp open socket: Operation not permitted 141 | 142 | 解决方法 143 | 144 | : 打开终端,输入 `sudo setcap cap_net_raw+ep /bin/ping`。 145 | 146 | !!! info "新虚拟机不会出现此问题" 147 | 148 | 在收到反馈后,我们已更新 01 号镜像。新创建的虚拟机不会出现此问题。 149 | 150 | ### 连接课程 FTP 显示中文乱码 {#s-ftp-encoding} 151 | 152 | 部分课程搭建的 FTP 服务器不支持通用的 UTF-8 编码,这会导致使用自带的文件管理器连接 FTP 后中文显示为乱码,并且文件名后出现 `(无效编码)`。可以手动安装 FileZilla 后使用 FileZilla,设定编码后连接到 FTP 服务器: 153 | 154 | 1. 打开左上角 应用程序 -> 系统工具 -> MATE 终端,输入 `sudo apt update && sudo apt install filezilla` 安装软件。 155 | 2. 打开 应用程序 -> 互联网 -> FileZilla,启动 FileZilla。 156 | 3. 在 FileZilla 窗口中点击 文件 -> 站点管理器,然后点击「新站点」,输入课程 FTP 的主机(IP)和用户名、密码。**由于不支持 UTF-8 的 FTP 服务器一般版本都非常老旧,因此「加密」选项也需要修改为「只使用明文 FTP(不安全)」**,如图所示: 157 | 158 | ![FileZilla site manager](images/FileZilla-site-1.png) 159 | 160 | 4. 点击字符集,**选择「使用自定义的字符集」,编码输入 GB18030**。 161 | 5. 点击「连接」,测试是否可用,未来需要连接时,只需要在站点管理器中双击上面新建的站点即可。 162 | 163 | ### Apparmor 限制导致的问题 {#s-apparmor} 164 | 165 | LXC 容器**不**支持 Apparmor,该包也不预装。如果在容器中安装了 `apparmor`,那么一部分程序运行可能会出现非预期的问题。已知可能会出现问题的程序有: 166 | 167 | - tcpdump 168 | - flatpak 169 | - docker.io 170 | 171 | 删除 `apparmor` 包后重启即可。 172 | 173 | ## 软件限制 {#limits} 174 | 175 | 由于技术更迭: 176 | 177 | - 较早的虚拟机(编号在大约 1800 以前)默认未开启 Docker 容器支持; 178 | - 2023 年 6 月 14 日前创建的虚拟机默认未开启 FUSE 支持。 179 | 180 | 如果有需要,请联系我们开通。 181 | 182 | 关于开启额外功能的详情请参见[额外功能](advanced/resources.md)。 183 | 184 | ### 需要挂载镜像至回环设备 (loop) 185 | 186 | 由于技术限制,我们无法在保证安全的前提下实现回环设备的共享。请根据文件系统的不同,考虑使用 FUSE 方案,或者使用基于 libguestfs 的 guestfish 或 guestmount 进行文件操作。 187 | 188 | ??? tip "一个使用 guestfish 的参考例子" 189 | 190 | ```sh 191 | # 安装下面的操作需要的软件包 192 | $ sudo apt install --no-install-recommends libguestfs-tools 193 | 194 | # guestfish 依赖于在虚拟机中运行 Linux 内核来实现文件系统支持,因此需要安装内核(即使容器本体根本用不到) 195 | # 如果希望使用 KVM 加速 guestfish(需要 root),请查看下面一节。 196 | $ sudo apt install --no-install-recommends linux-image-generic 197 | 198 | # 可以使用 guestfish 创建一个 1G 的空白磁盘,并格式化为 GPT 分区表,创建一个分区,在 guestfish 中挂载为 /dev/sda1 199 | # $ guestfish -N disk.img=fs:ext4:1G:gpt -m /dev/sda1 200 | # 当然,这里我们展示更加传统的方案…… 201 | $ truncate -s 1G disk.img 202 | $ parted disk.img mklabel gpt mkpart primary 0% 100% 203 | # 使用 guestfish 挂载磁盘 204 | $ guestfish -a disk.img 205 | 206 | Welcome to guestfish, the guest filesystem shell for 207 | editing virtual machine filesystems and disk images. 208 | 209 | Type: ‘help’ for help on commands 210 | ‘man’ to read the manual 211 | ‘quit’ to quit the shell 212 | 213 | > run 214 | > list-partitions 215 | /dev/sda1 216 | > mke2fs /dev/sda1 fstype:ext4 217 | > list-filesystems 218 | /dev/sda1: ext4 219 | > mount /dev/sda1 / 220 | > ls / 221 | lost+found 222 | > touch /hello 223 | > upload /etc/os-release /testfile 224 | > cat /testfile 225 | PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" 226 | NAME="Debian GNU/Linux" 227 | VERSION_ID="11" 228 | VERSION="11 (bullseye)" 229 | VERSION_CODENAME=bullseye 230 | ID=debian 231 | HOME_URL="https://www.debian.org/" 232 | SUPPORT_URL="https://www.debian.org/support" 233 | BUG_REPORT_URL="https://bugs.debian.org/" 234 | > download /testfile ./testfile2 235 | > exit 236 | $ cat testfile2 237 | # 输出省略 238 | ``` 239 | 240 | ### 使用 KVM 和 TUN 设备 {#kvm-and-tun} 241 | 242 | 如果需要使用 `/dev/kvm` 或 `/dev/net/tun`,在启动后手动执行以下命令: 243 | 244 | ```sh 245 | sudo /opt/vlab/.dev/enable-dev.sh 246 | ``` 247 | 248 | 该命令会创建所需的设备文件,但默认情况下 `/dev/kvm` 仅限 root 用户可以访问。例如,如果需要使用 KVM 加速的 QEMU(例如操作系统实验),可以使用以下命令: 249 | 250 | ```sh 251 | # 安装 qemu-system-x86 252 | sudo apt install qemu-system-x86 253 | # 创建磁盘等配置 254 | # ... 255 | # 执行 KVM 加速的 QEMU,需要 root 权限 256 | sudo qemu-system-x86_64 -cpu host -enable-kvm ... 257 | ``` 258 | 259 | 若要在普通用户下使用 KVM 加速的 QEMU,可以将普通用户加入 `kvm` 用户组(GID = 107)中。对于 Ubuntu 系统,可以使用 `usermod -aG kvm ` 命令。 260 | 261 | ### 在进行操作系统实验时无法使用 `mknod` 新建设备文件 {#s-mknod-permission-denied} 262 | 263 | 需使用 `fakeroot`,详情可参考 [2020 年 OSH 实验讲义](https://osh-2020.github.io/lab-1/initrd/#fakeroot-initrd)。 264 | 265 | ## 虚拟机镜像选择 {#image-selection} 266 | 267 | 请参考 [虚拟机镜像](advanced/images.md) 一页。 268 | 269 | ## 故障排除 {#troubleshooting} 270 | 271 | 如果你的虚拟机出现问题,你可以[通过 SSH 命令行以恢复模式登录虚拟机](login/ssh.md#recovery)尝试进行错误排除。 272 | 273 | ## 系统大版本升级 {#dist-upgrade} 274 | 275 | 我们不建议在 LXC 虚拟机(容器)中执行大版本升级操作(如从 20.04 升级至 22.04),如果真的需要升级,请注意: 276 | 277 | - 确保自己能够登录到[恢复模式 SSH](login/ssh.md#recovery) 中; 278 | - 请在 SSH 命令行中完成升级。在图形界面中升级可能导致升级中断,带来问题。 279 | 280 | ### Ubuntu 22.04 281 | 282 | 如果在图形界面中从 20.04 升级至 22.04 后无法启动,请执行以下操作: 283 | 284 | 1. 登录恢复模式 SSH,删除 `/etc/acpi/events` 下的所有文件; 285 | 2. 重启; 286 | 3. 重启后 SSH 登录系统,运行 `apt upgrade` 完成剩下的升级操作。 287 | -------------------------------------------------------------------------------- /docs/login/ssh.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: octicons/terminal-16 3 | --- 4 | 5 | # 通过 SSH 命令行登录虚拟机 6 | 7 | !!! example "支持的虚拟机和客户端" 8 | 9 | SSH 登录方式支持 Linux LXC 虚拟机和 Linux KVM 虚拟机。 10 | 11 | SSH 登录方式支持包括 Windows, macOS, Linux, iOS 和 Android 在内的客户端系统。 12 | 13 | !!! success "推荐使用公钥方式登录" 14 | 15 | 详情请见下方[公钥登录](#pubkey)的段落。 16 | 17 | ## 登录用户名 {#username} 18 | 19 | 对于使用默认 vlab01 镜像的用户,请使用 `ubuntu` 用户登录。手动选择其他镜像的用户请参考[虚拟机镜像](../advanced/images.md#image-content)。使用 `root` 用户进行日常操作不是一个好习惯,因此在可行的情况下,建议不使用 `root` 用户登录。 20 | 21 | !!! example "例子" 22 | 23 | :material-check:{: .green } 正确(使用默认镜像的情况) 24 | 25 | : ssh **ubuntu**@vlab.ustc.edu.cn 26 | 27 | :material-check:{: .green } 正确(使用其他部分镜像的情况) 28 | 29 | : ssh **vlab**@vlab.ustc.edu.cn 30 | 31 | :material-exclamation:{: .orangered } 正确但不推荐 32 | 33 | : ssh **root**@vlab.ustc.edu.cn 34 | 35 | :material-close:{: .orangered } 错误:你的学号不是 SSH 的登录用户名 36 | 37 | : ssh **PB17000001**@vlab.ustc.edu.cn 38 | 39 | ### 恢复模式 {#recovery} 40 | 41 | 如果你的虚拟机出现故障导致 SSH 和 VNC 都无法正常连接,你仍然可以通过 SSH 使用以下登录方式尝试修复: 42 | 43 | ??? info "对于 Linux LXC 虚拟机" 44 | 45 | `ssh recovery@vlab.ustc.edu.cn` 可以提供虚拟机内的一个 root shell; 46 | 47 | `ssh console@vlab.ustc.edu.cn` 可以连接至虚拟机的 tty0,此处可以看到虚拟机在开关机过程中的各种日志输出。 48 | 49 | ??? info "对于 Linux KVM 虚拟机" 50 | 51 | `ssh serial@vlab.ustc.edu.cn` 可以提供到虚拟机的串口(COM1)的连接。 52 | 53 | 该功能由 SSH 统一登录接口提供,因此使用相同的认证方式,即已配置的虚拟机公钥(推荐)或 Vlab 平台用户名和密码。 54 | 55 | ## 从浏览器登录 {#web} 56 | 57 | 2022 年 4 月,我们添加了网页登录 SSH 的功能,在虚拟机管理页面直接点击「网页 SSH 登录」即可。 58 | 59 | !!! question "用户名密码是什么?" 60 | 61 | `Vlab username` 是你的学号(或工号),在登录虚拟机管理页面后可以在右上角看到。 62 | 63 | `Vlab password` 是 Vlab 平台的登录密码。[还没设置?](../web.md#change-password) 64 | 65 | ### 复制与粘贴 {#web-copy-paste} 66 | 67 | 与大多数的终端模拟器一致,可以使用 `Ctrl + Shift + C` 和 `Ctrl + Shift + V`(macOS 用户:`Command + C` 和 `Command + V`)来复制和粘贴文本。 68 | 69 | ### 登录用户 {#web-username} 70 | 71 | 默认以 root 用户登录。URL 中可以配置以其他用户登录:在 URL 中添加 `unixusername` 参数即可,例如虚拟机 1234 默认的 URL 为: 72 | 73 | ```text 74 | https://vlab.ustc.edu.cn/ssh/?username=:1234 75 | ``` 76 | 77 | 如果需要以 `ubuntu` 用户登录,添加 `unixusername` 参数如下: 78 | 79 | ```text 80 | https://vlab.ustc.edu.cn/ssh/?username=:1234&unixusername=ubuntu 81 | ``` 82 | 83 | 此外,你也可以填入恢复模式使用的用户名 `recovery`、`console` 和 `serial`,因此可以通过网页版 SSH 进入救援模式: 84 | 85 | ```text 86 | https://vlab.ustc.edu.cn/ssh/?username=:1234&unixusername=recovery 87 | ``` 88 | 89 | ### 上传文件与下载文件 {#web-files} 90 | 91 | SSH 网页版支持文件拖动上传与文件下载。首先需要在虚拟机内安装 `lrzsz` 软件包: 92 | 93 | ```shell 94 | sudo apt install lrzsz 95 | ``` 96 | 97 | 安装后从本地拖动文件到浏览器窗口中即可上传。如需下载文件,使用 `sz` 命令。例如下载 `yrcamp.jpg` 文件: 98 | 99 | ```shell 100 | sz yrcamp.jpg 101 | ``` 102 | 103 | 输入命令后,浏览器窗口中会出现一个对话框显示文件名与文件大小,点击 Download 即可。 104 | 105 | !!! warning "避免使用此功能上传/下载大文件" 106 | 107 | 较大的文件请考虑使用网页版文件传输功能,或配置命令行 ssh 登录后,使用 `scp` 或 `rsync` 命令处理。 108 | 109 | ## 从命令行登录 {#cli} 110 | 111 | === ":fontawesome-brands-apple: macOS 和 :fontawesome-brands-linux: Linux" 112 | 113 | macOS 自带命令行 SSH 客户端,同时绝大多数的 Linux 发行版也自带了 SSH 客户端。若你的 Linux 系统中没有 SSH 客户端(`ssh` 命令),请自行搜索资料安装,软件包的名称通常为 `ssh`、`openssh` 或 `openssh-client` 之一。 114 | 115 | 取决于你所选择的[虚拟机镜像](../advanced/images.md),SSH 的登录用户名可能为 root、ubuntu 或 vlab,或者你自己创建的用户名。打开操作系统提供的终端应用,输入命令(以 ubuntu 用户为例): 116 | 117 | ```shell 118 | ssh ubuntu@vlab.ustc.edu.cn 119 | ``` 120 | 121 | 如果遇到 Warning,请输入 `yes`,然后根据提示输入 Vlab 平台的用户名和密码,即可登录虚拟机。出于安全考虑,输入密码的时候没有回显。 122 | 123 | ![SSH console login](../images/ssh_1.png) 124 | 125 | === ":fontawesome-brands-windows: Windows" 126 | 127 | Windows 10 可以在系统设置中启用 OpenSSH 客户端,请参考[微软的说明文档](https://docs.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse)安装。 128 | 129 | 同时 Windows 平台也有各种 Linux / Unix 环境模拟软件,例如 130 | 131 | - [Git Bash](https://gitforwindows.org/) ([MSYS2](https://www.msys2.org/)) 132 | - [Cygwin](https://www.cygwin.com/) 133 | - [Windows Subsystem for Linux](https://docs.microsoft.com/zh-cn/windows/wsl/install-win10) 134 | 135 | 你可以安装上述软件中的任何一种,然后参考“macOS 和 Linux”的使用说明。我们推荐使用 Git Bash 或者 WSL。 136 | 137 | === ":fontawesome-brands-android: Android" 138 | 139 | Android 系统可以从 [Google Play](https://play.google.com/store/apps/details?id=com.termux) 或者 [F-Droid](https://f-droid.org/en/packages/com.termux/) 获取 Termux 应用程序,然后使用 `pkg install ssh` 命令安装 SSH 客户端,然后参考“macOS 和 Linux”的使用说明。 140 | 141 | !!! question "拥有多个虚拟机?" 142 | 143 | 如果你拥有多个虚拟机,我们建议[使用公钥登录](#pubkey)。 144 | 145 | 除了公钥登录之外,你也可以在提示 Vlab username 时输入 `学号:虚拟机编号` 的形式,例如 `PB17000000:1234`。 146 | 147 | !!! question "用户名密码是什么?" 148 | 149 | `Vlab username` 是你的学号(或工号),在登录虚拟机管理页面后可以在右上角看到。 150 | 151 | `Vlab password` 是 Vlab 平台的登录密码。[还没设置?](../web.md#change-password) 152 | 153 | ### 使用公钥登录虚拟机(:fontawesome-solid-star:推荐) {#pubkey} 154 | 155 | 使用公钥登录虚拟机可以免除每次输入密码的麻烦。 156 | 157 | #### 生成 SSH 密钥对并下载到本地 {#get-pubkey} 158 | 159 | 进入虚拟机管理界面,可以在自己虚拟机下方找到 SSH 密钥管理入口: 160 | 161 | ![Vlab pubkey entry](../images/web-pubkey-entrypoint.png) 162 | 163 | 点击进入,即可通过点击 \[生成新的 SSH 密钥对\] 生成 SSH 密钥对: 164 | 165 | ![Vlab pubkey generate](../images/web-pubkey-generate.png) 166 | 167 | 此时公钥已经存储到 Vlab 平台上,只需要下载私钥并做一些配置就能利用密钥对进行免密登录。 168 | 169 | 点击 \[下载私钥\] 就能在下载文件中找到一个以 `.pem` 结尾的文件,这就是对应的 SSH 私钥。请妥善保管它,因为**任何获得这个文件的人都能够登录你的虚拟机**。 170 | 171 | 由于技术限制,每个虚拟机的私钥都是独立的。若你删除并重新创建了虚拟机,你需要重新生成密钥对才能使用密钥登录新的虚拟机。 172 | 173 | #### 配置 SSH 命令登录 {#ssh-command} 174 | 175 | === ":fontawesome-brands-apple: macOS,:fontawesome-brands-linux: Linux 和 :octicons-terminal-16: Termux" 176 | 177 | 根据约定俗成,一般将私钥放在 `~/.ssh` 目录中,例如 `~/.ssh/vlab.pem`: 178 | 179 | ```shell 180 | chmod 600 ~/.ssh/vlab.pem 181 | ssh -i ~/.ssh/vlab.pem ubuntu@vlab.ustc.edu.cn 182 | ``` 183 | 184 | === ":fontawesome-brands-windows: Windows" 185 | 186 | 根据约定俗成,一般将私钥放在 `%UserProfile%\.ssh` 目录中,例如 `%UserProfile%\.ssh\vlab.pem` 187 | 188 | 在资源管理器中右键点击私钥文件,选择 **属性** → **安全**,确保只有你的账户有访问私钥文件的权限。详细步骤可以参考[这个链接](https://superuser.com/a/1296046/688600)。 189 | 190 | 修改权限后,可以在 CMD 或 PowerShell 中使用 ssh 命令登录: 191 | 192 | ```bat 193 | ssh -i %UserProfile%\.ssh\vlab.pem ubuntu@vlab.ustc.edu.cn 194 | ``` 195 | 196 | !!! tip "使用公钥" 197 | 198 | 与传统的 SSH 公钥不同,使用公钥登录 Vlab 平台时,用户名可以在 root、ubuntu 或 vlab 中任意选择。在较旧的虚拟机中,若你使用了其他用户名,则你还需要输入虚拟机内对应用户的密码。 199 | 200 | ### 使用 SSH 配置文件 {#ssh-config} 201 | 202 | 为了方便使用,你也可以将上述配置写入 SSH 配置文件中,例如: 203 | 204 | ```shell title="~/.ssh/config" 205 | Host vlab 206 | HostName vlab.ustc.edu.cn 207 | User ubuntu 208 | IdentityFile ~/.ssh/vlab.pem 209 | ``` 210 | 211 | 如果你经常使用 VSCode 的 Remote SSH 功能的话,我们强烈推荐写好 SSH 配置文件并采用公钥登录的方式,避免每次登录都需要输入学号和 Vlab 平台密码的麻烦。 212 | 213 | ## 使用 PuTTY 客户端登录 {#putty} 214 | 215 | ### 安装 PuTTY 216 | 217 | === ":fontawesome-brands-windows: Windows" 218 | 219 | 首先[下载 PuTTY 客户端](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html),然后双击打开,安装过程很简单,直接 \[下一步\] 到底即可。安装完成后,找到并打开 PuTTY,如图: 220 | 221 | ![PuTTY in Windows 10 Start Menu](../images/putty-win10-tile.png) 222 | 223 | 在 Host Name 一栏填入 `vlab.ustc.edu.cn`,端口号为 22(这是默认值),点击 **Open**,如图: 224 | 225 | ![PuTTY configuration](../images/putty-config.png) 226 | 227 | 第一次连接时会提示你选择信任 Vlab 统一登录平台,点 Yes 即可: 228 | 229 | ![PuTTY host key prompt](../images/putty-host-key.png) 230 | 231 | === ":fontawesome-brands-linux: Linux" 232 | 233 | 部分 Linux 发行版的软件源里提供了 PuTTY 软件,可以直接从软件源安装,例如: 234 | 235 | * Ubuntu 和 Debian:`sudo apt-get install putty` 236 | 237 | * CentOS, Fedora 和 RHEL:`sudo yum install putty` 238 | 239 | * Arch Linux 和 Manjaro:`sudo pacman -S putty` 240 | 241 | 安装完成后请参考 Windows 的使用说明来使用和配置 PuTTY。 242 | 243 | ### 使用密码登录虚拟机 {#putty-password} 244 | 245 | 连接到统一登录平台后,PuTTY 会要求你输入用户名和密码。取决于你所选择的[虚拟机镜像](../advanced/images.md),SSH 的登录用户名可能为 root、ubuntu 或 vlab,或者你自己创建的用户名。然后根据提示输入你的 Vlab 用户名和密码(输入的密码没有回显),按回车即可: 246 | 247 | ![PuTTY screen](../images/putty-login.png) 248 | 249 | 登录成功后即可使用虚拟机,如图: 250 | 251 | ![PuTTY shell](../images/putty-login-success.png) 252 | 253 | PuTTY 还有一些高级的使用方法,例如你可以保存这些连接信息,以后可以更方便地连接虚拟机。这里有两篇不错的使用教程: 254 | 255 | - 256 | - 257 | 258 | ### 使用公钥登录虚拟机 {#putty-pubkey} 259 | 260 | #### 将 .pem 格式的私钥转换为 .ppk 格式 {#pubkey-convert} 261 | 262 | 由于 PuTTY 使用的私钥格式为其专用的 `.ppk` 格式,而不是更为通用的 PEM 格式,所以我们还要进行一步转换。转换私钥格式需要用到 PuTTYgen,即 PuTTY 的密钥生成与转换工具。一般在安装 PuTTY 时已包含它,如果你安装的 PuTTY 中未包含这个工具,请在[这个页面](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)直接下载 `puttygen.exe`。 263 | 264 | 首先参考[使用公钥登录虚拟机](#pubkey)一节下载 PEM 格式的公钥文件。在开始菜单的 PuTTY 文件夹下,或者 PuTTY 的安装目录下就能找到 PuTTYgen,打开后可以看到如下界面: 265 | 266 | ![PuTTY pubkey format convert](../images/putty-pubkey-format-convert.png) 267 | 268 | 点击 **Load** 找到刚刚下载的 `.pem` 文件打开,然后点击 **Save private key**,选择一个合适目录保存生成的 `.ppk` 文件。同样地,请妥善保管这个私钥文件。 269 | 270 | #### 在 PuTTY 中设置私钥并保存会话信息 {#pubkey-save-session} 271 | 272 | 先到 Connection - Data 项设置自己的登录用户名(这里以 root 为例,你也可以使用 ubuntu 或 vlab,详情参见[镜像配置](../advanced/images.md#image-content)),如图: 273 | 274 | ![PuTTY pubkey config 1](../images/putty-pubkey-config1.png) 275 | 276 | 再点 SSH 项下面的 Auth,添加上一步转换得到的 `.ppk` 格式的私钥: 277 | 278 | ![PuTTY pubkey config 2](../images/putty-pubkey-config2.png) 279 | 280 | 然后最重要的是回到最上面的 Session 项里保存,不然下次又得重新添加一遍。你可以为这个配置取一个容易辨别的名字,例如 `vlab`。 281 | 282 | ![PuTTY pubkey save session](../images/putty-pubkey-savesession.png) 283 | 284 | 保存后每次登录时只需要双击之前保存的连接信息,就能免密登录你的虚拟机。 285 | 286 | ## 使用其他客户端登录 {#others} 287 | 288 | 市面上还有诸如 XShell 和 Termius 等其他客户端,作为 SSH 客户端,它们的功能和使用方法大都相似,这里不再一一给出使用说明。 289 | 290 | 对于 Windows 操作系统,可以在这里下载 [XShell](https://www.netsarang.com/zh/free-for-home-school/) 或 [Termius](https://termius.com/windows)。请参考各软件的使用说明来配置登录。其中 Termius 还有 macOS、Linux、iOS 和 Android 等多个系统的版本,具体请在 [Termius 官网](https://termius.com/)上查看。 291 | -------------------------------------------------------------------------------- /docs/tutorial/vscode2vlab.md: -------------------------------------------------------------------------------- 1 | --- 2 | icon: material/transit-connection-variant 3 | --- 4 | 5 | # 本地 VSCode 通过 Remote SSH 连接 Vlab 6 | 7 | ## 虚拟机 Vivado 新建工程和设计文件 {#vivado} 8 | 9 | ### 1. 新建工程 10 | 11 | 在虚拟机的桌面上,最上面**应用程序**中的 **Vlab 实验软件**里可找到预先安装的的 Vivado,点击进入 Vivado。这里请大家选择 2019.1 版本,不要选择 2016.3 的旧版本。2023.1 版本的 Vivado 虽然更便捷,但可能引起内存不足的警告,因此请大家酌情使用。 12 | 13 | ![vlab experiment tools](../images/vscode2vlab/vivado1.png) 14 | 15 | 进入 Vivado 后,点击 Create Project: 16 | 17 | ![Create Project](../images/vscode2vlab/vivado2.png) 18 | 19 | 然后点击 Next: 20 | 21 | ![Next](../images/vscode2vlab/vivado3.png) 22 | 23 | 在这个界面,你可以设置工程文件的名称和路径: 24 | 25 | ![Name Path](../images/vscode2vlab/vivado4.png) 26 | 27 | 随后一路 Next,直到遇到“选择开发板型号”的界面。搜索我们使用的开发板,型号为 `xc7a100tcsg324-1`,点击选择最下面的开发板。 28 | 29 | !!! info "注意" 30 | 31 | 此型号是按照往年课程使用的开发板选择的。 32 | 33 | 若课程安排有所调整,请以实际课程要求开发板型号为准。 34 | 35 | ![ChooseModel](../images/vscode2vlab/vivado5.png) 36 | 37 | 完成后,我们就成功新建了一个工程项目,可以看到如下界面: 38 | 39 | ![Finish](../images/vscode2vlab/vivado6.png) 40 | 41 | ### 2. 新建设计文件 42 | 43 | 新建工程项目后,里面还没有我们的设计文件,接下来我们要为工程项目新建自己的设计文件。 44 | 45 | 在界面左侧可以找到 Add Sources,点击它: 46 | 47 | ![Add Sources](../images/vscode2vlab/vivado7.png) 48 | 49 | 接下来我们开始新建设计文件,点击 Next,选择 Create File: 50 | 51 | ![Next](../images/vscode2vlab/vivado8.png) 52 | 53 | ![Create File](../images/vscode2vlab/vivado9.png) 54 | 55 | ??? question "如何把别处的源代码加入此工程项目?" 56 | 57 | 我们在开发时,可能有这种情况:其他位置已经写好了一份设计文件,可以用于此工程,如果在此工程中再新建一份此文件便浪费了时间和空间。我们可以按如下操作把别处的源代码加入此项目: 58 | 59 | 在新建设计文件时,点击 Create File 左边的 **Add Files**,便可将其他位置已经写好的设计文件添加到此工程中。点击 **Add Directories** 可将别处的文件夹中所有设计文件加入此工程。 60 | 61 | 需要注意的是,这里的“加入”,并不是把原来的设计文件复制一份加入此工程,而是直接加入。也就是说当你在此工程中对该设计文件进行修改时,如果该设计文件也被包含在其他工程中,那么其他工程中的这个设计文件也会被修改。 62 | 63 | 我们可以自行设置新建文件的名称: 64 | 65 | ![Filename](../images/vscode2vlab/vivado10.png) 66 | 67 | 这样,我们就完成了设计文件的新建。双击文件就可以在编辑器中编辑它了。 68 | 69 | ![Finish](../images/vscode2vlab/vivado11.png) 70 | 71 | ## 本地安装并配置 VSCode {#installvs} 72 | 73 | Visual Studio Code 是一款由微软开发的免费、轻量级且可扩展的代码编辑器。它适用于构建 Web、桌面和移动应用,并且支持多种编程语言和框架,具有丰富的扩展功能。下面介绍本地安装和配置 VSCode 的操作。 74 | 75 | !!! info "注意" 76 | 77 | 本文档主要用于**数字电路实验**教学,介绍了如何配置 VSCode 中 Verilog 相关环境。如需其他编程语言环境配置,请自行学习并操作。 78 | 79 | ### 1. 安装 VSCode 80 | 81 | 进入 VSCode 的[官方网站](https://code.visualstudio.com/),点击 Download for Windows 下载。下载完成后打开可执行文件。在**选择附加任务**时建议全部勾选,特别是**添加到 PATH** 要勾选,否则后续还要自己将其添加到环境变量。 82 | 83 | !!! info "注意" 84 | 85 | 为了 VSCode 使用的稳定性,安装路径不要包含中文。下面要讲的 ctags 和 iverilog 同理,安装路径也要避免中文。 86 | 87 | ![Add to path](../images/vscode2vlab/vscode1.png) 88 | 89 | 在我们完成了 VSCode 的安装后,第一次打开时界面是纯英文,看起来不是很方便。对此我们可以找到左侧的 **Extensions** 点开,搜索 Chinese,安装第一个“中文(简体)”然后重启 VSCode 即可汉化 VSCode。 90 | 91 | ![Chinese](../images/vscode2vlab/vscode2.png) 92 | 93 | ### 2. 安装 Verilog-HDL/SystemVerilog 插件 94 | 95 | 在汉化 VSCode 后,想必大家已经会在 VSCode 中搜索并安装插件了。对于 Verilog 的开发,我们需要安装 **Verilog-HDL/SystemVerilog** 插件。 96 | 97 | ![Verilog-HDL](../images/vscode2vlab/vscode3.png) 98 | 99 | 这个插件提供了 Verilog 开发的大多数基础功能,包括: 100 | 101 | - 代码高亮 102 | - 简单语法补全提示 103 | - 静态语法检查(需要自行配置 linter) 104 | - Ctags 功能集成(需要额外安装 ctags 组件) 105 | - 自动补全 106 | - 文档符号大纲 107 | - 鼠标悬停显示代码声明 108 | - Ctrl 鼠标点击跳转到代码声明 109 | 110 | ### 3. 安装 iverilog 和 ctags {#iverilog-and-ctags} 111 | 112 | 目前我们已经安装了 Verilog-HDL/SystemVerilog 插件,但还需要安装 **iverilog**(一种 linter)和 **ctags**。 113 | 114 | ??? tip "关于 linter" 115 | 116 | **Linter** 是自动检查源代码中是否存在编程和样式错误的工具。对于 Verilog 的 linter 当然不止一种,本教程中使用的是 iverilog。除此之外还有 xvlog 和 Verilator,但 xvlog 来自于 Vivado,你需要在电脑本地安装 Vivado 才有 xvlog。而 Verilator 则是面向 Linux 平台开发的,截至目前使用官网方法在 Windows 平台上编译的 Verilator 都无法配合 VSCode 完成代码检查,需要在子系统 WSL 中安装并运行 Verilator,这里不再介绍具体步骤。 117 | 118 | 我们进入 iverilog 的[下载网站](https://bleyer.org/icarus/),在 Download 中下载最新版本即可。安装时在 Select Components 界面全部勾选,然后勾选可执行文件所在文件夹加入用户路径。 119 | 120 | ![iverilog GTKWave](../images/vscode2vlab/vscode4.png) 121 | 122 | ![iverilog Path](../images/vscode2vlab/vscode5.png) 123 | 124 | 安装后将 iverilog.exe 和 gtkwave.exe 所在文件夹的路径复制加入用户环境变量。 125 | 126 | ![iverilog Environment](../images/vscode2vlab/vscode6.png) 127 | 128 | !!! question "如何添加环境变量" 129 | 130 | 设置 -> 系统 -> 系统信息 -> 高级系统设置 -> 环境变量 -> 在上方的“用户变量”中找到 **Path** 一栏,双击进入,点击新建即可添加环境变量。 131 | 132 | 然后在命令行中输入以下命令检查 iverilog 是否安装成功: 133 | 134 | ```shell 135 | iverilog -help 136 | ``` 137 | 138 | 出现以下信息说明安装成功: 139 | 140 | ```text 141 | Usage: iverilog [-EiSuvV] [-B base] [-c cmdfile|-f cmdfile] 142 | [-g1995|-g2001|-g2005|-g2005-sv|-g2009|-g2012] [-g] 143 | [-D macro[=defn]] [-I includedir] [-L moduledir] 144 | [-M [mode=]depfile] [-m module] 145 | [-N file] [-o filename] [-p flag=value] 146 | [-s topmodule] [-t target] [-T min|typ|max] 147 | [-W class] [-y dir] [-Y suf] [-l file] source_file(s) 148 | 149 | See the man page for details. 150 | ``` 151 | 152 | 再输入以下命令检查 gtkwave 是否安装成功: 153 | 154 | ```shell 155 | gtkwave 156 | ``` 157 | 158 | 弹出这个软件则配置成功。 159 | 160 | ![gtkwave](../images/vscode2vlab/vscode7.png) 161 | 162 | 接下来我们进入[下载页面](https://github.com/universal-ctags/ctags-win32/releases)安装 **ctags**,可选择最新版本进入下载。 163 | 164 | ![ctags](../images/vscode2vlab/vscode8.png) 165 | 166 | ctags 无需安装,解压后同样将 ctags.exe 所在文件夹路径复制加入环境变量即可。 167 | 168 | 检查 ctags 是否能够运行: 169 | 170 | ```shell 171 | ctags --version 172 | ``` 173 | 174 | 显示的 ctags 信息是 universal ctags,说明安装正常。 175 | 176 | ### 4. 配置 Verilog-HDL/SystemVerilog 插件 {#config-extension} 177 | 178 | 在安装好 iverilog 和 ctags 后,我们要将其配置到到 Verilog-HDL/SystemVerilog 插件中。在已安装的插件中找到 Verilog-HDL/SystemVerilog,点击“管理”,打开“扩展设置”。 179 | 180 | 按下面的设置配置 ctags,将 linter 选择为 iverilog,并在 iverilog 的 Argument 一栏中加入 -i 参数。 181 | 182 | ![Extension Config](../images/vscode2vlab/vscode9.png) 183 | 184 | ![Extension Config](../images/vscode2vlab/vscode10.png) 185 | 186 | ![Extension Config](../images/vscode2vlab/vscode11.png) 187 | 188 | !!! tip "关于配置的说明" 189 | 190 | 由于在安装 ctags 时已经将其加入到了环境变量,所以这里只需填入 ctags 即可。关于 `-i` 参数,是因为在实例化模块时 iverilog 会报错 "Unknown module type",添加 `-i` 参数可以避免这种不合理的报错。 191 | 192 | 这样我们就可以在 VSCode 中进行 Verilog 的开发了! 193 | 194 | ![verilog](../images/vscode2vlab/vscode12.png) 195 | 196 | !!! info "提示" 197 | 198 | 在用 VSCode 编写 Verilog 代码时,只有将文件保存后才会进行语法检查哦! 199 | 200 | ## 本地安装 SSH 环境 {#installssh} 201 | 202 | 在 Windows 系统中,OpenSSH 客户端和 OpenSSH 服务器是可单独安装的组件:OpenSSH 客户端可以使用 ssh 命令连接到其他支持 SSH 的设备,而 OpenSSH 服务器允许其他设备通过 SSH 连接到你的电脑。 203 | Windows 用户应使用以下说明来安装和配置 OpenSSH。 204 | 205 | 在命令行中输入 `ssh`,若输出以下信息则已经安装,可跳过安装步骤。 206 | 207 | ![ssh](../images/vscode2vlab/SSH1.png) 208 | 209 | !!! info "Windows 10 和 Windows 11" 210 | 211 | Windows 10 和 Windows 11 版本的 OpenSSH 安装有所区别,请按对应的版本进行操作。 212 | 213 | 在安装时, 214 | Windows 10 用户在 **设置 -> 应用 -> 应用和功能 -> 可选功能 -> 添加功能** 中搜索 **OpenSSH**; 215 | Windows 11 用户在 **设置 -> 系统 -> 可选功能 -> 查看功能** 中搜索 **OpenSSH**,进行安装。 216 | 217 | !!! tip "说明" 218 | 219 | 我们只需安装 SSH 客户端便可远程连接虚拟机了,关于 SSH server 的配置这里不再细讲。如果要开启 SSH server 服务允许其他设备用 SSH 连接到你的电脑上,需要开启防火墙的 22 端口。 220 | 221 | 然后我们就可以开始通过 SSH 远程连接 Vlab 了! 222 | 223 | !!! note "说明" 224 | 225 | 在安装「OpenSSH 客户端」功能后,如果在命令行中输入 `ssh` 仍然提示无法找到命令,可以尝试将 `C:\Windows\System32\OpenSSH\` 加入环境变量,具体操作请参考上方配置 [iverilog 和 ctags](#iverilog-and-ctags) 的部分。 226 | 227 | ## SSH 通过命令行远程连接 Vlab {#ssh2vlab} 228 | 229 | ### 1. SSH 连接 Vlab 230 | 231 | 我们以 Vlab 的 ubuntu 用户为例,打开本地命令行,输入命令: 232 | 233 | ```shell 234 | ssh ubuntu@vlab.ustc.edu.cn 235 | ``` 236 | 237 | 如果遇到 Warning,请输入 yes,然后根据提示输入 Vlab 平台的用户名和密码,即可登录虚拟机。 238 | 239 | !!! question "用户名密码是什么?" 240 | 241 | `Vlab username` 是你的学号(或工号),在登录虚拟机管理页面后可以在右上角看到。 242 | 243 | `Vlab password` 是 Vlab 平台的登录密码。[还没设置?](../web.md#change-password) 244 | 245 | !!! question "Vlab 的登录用户名?" 246 | 247 | 这里请参考**SSH 命令行登录**页面的[登录用户名](../login/ssh.md#username)章节。 248 | 249 | 在断开与虚拟机的连接时输入 `exit` 即可。 250 | 251 | ![ssh](../images/vscode2vlab/SSH2.png) 252 | 253 | ### 2. 使用公钥登录虚拟机 254 | 255 | 使用公钥登录虚拟机可以免除每次输入密码的麻烦,我们首先要生成密钥对并下载到本地。 256 | 257 | 这里下载密钥对的操作请参考**SSH 命令行登录**页面的[生成 SSH 密钥对并下载到本地](../login/ssh.md#get-pubkey)章节。 258 | 259 | 我们将私钥放在 `%UserProfile%\.ssh` 目录中,例如 `%UserProfile%\.ssh\vlab.pem`。 260 | 261 | !!! info "注意" 262 | 263 | 本教程中该文件命名为 `vlab.pem`,如自行命名请在下面对应的步骤中修改相应配置。 264 | 265 | !!! question "什么是 %UserProfile% " 266 | 267 | `%UserProfile%` 是用户目录,即 `C:\Users\用户名`。`vlab.pem` 文件的完整路径例如 `C:\Users\Asus\.ssh\vlab.pem`。 268 | 269 | 要确保只有你的账户有访问私钥文件的权限,否则可能出现 "Permissions are too open" 报错。具体操作如下: 270 | 271 | 右键单击 `.pem` 文件,进入**属性 -> 安全 -> 高级**,可以看到以下界面。 272 | 273 | ![permission](../images/vscode2vlab/SSH3.png) 274 | 275 | 然后将所有者改为个人用户(如果已经是则不用改),并且删除掉其他用户的权限(如果这里因为继承权限无法删除,则要先点击"禁用继承")。如果在权限条目中没有个人用户,则需手动添加:在点击"添加"后点击"选择主体",然后指定对象类型为"用户",点击"高级",开始立即查找,便可找到个人用户。将其权限设置为"完全控制",确定添加即可。 276 | 277 | ![adduser](../images/vscode2vlab/SSH4.png) 278 | 279 | ![adduser](../images/vscode2vlab/SSH5.png) 280 | 281 | 最后设置完毕如下: 282 | 283 | ![permission finish](../images/vscode2vlab/SSH6.png) 284 | 285 | 修改权限后,可以在 CMD 或 PowerShell 中使用 ssh 命令登录: 286 | 287 | ```bat 288 | ssh -i %UserProfile%\.ssh\vlab.pem ubuntu@vlab.ustc.edu.cn 289 | ``` 290 | 291 | 这样我们通过 SSH 登录虚拟机就不用输入用户名和密码了。 292 | 293 | ### 3. 使用配置文件登录虚拟机 294 | 295 | 我们在 **C 盘个人用户**中的 **.ssh** 文件夹里新建文件 `config`(无后缀名),用记事本打开后输入以下内容: 296 | 297 | ```text 298 | Host vlab 299 | HostName vlab.ustc.edu.cn 300 | User ubuntu 301 | IdentityFile %UserProfile%\.ssh\vlab.pem 302 | ``` 303 | 304 | !!! info "路径" 305 | 如果你在上一步中按照教程放置 `.pem` 文件的位置,这里 `config` 文件应与其在同一个文件夹下。 306 | 307 | 此后我们在命令行中输入 `ssh vlab` 即可登录虚拟机,这样十分方便,而且支持了后面要讲的 VSCode 中使用 Remote SSH 功能。 308 | 309 | ## 本地 VSCode 通过 SSH 登录 Vlab {#vscode-ssh} 310 | 311 | 接下来我们在 VSCode 中通过 SSH 登录 Vlab。首先在 VSCode 中安装扩展 **Remote - SSH**。 312 | 313 | ![VSCode Extension SSH](../images/vscode2vlab/vs_vlab1.png) 314 | 315 | 安装后在左侧会出现**远程资源管理器**。如果前面已经按照教程配置好了 SSH,可以看到我们的虚拟机 Vlab。 316 | 317 | !!! info "注意" 318 | 319 | 请先按照上面的教程进行 SSH 配置,实现公钥登录并完成配置文件。 320 | 321 | 点击 **vlab** 右侧的图标,在现有的窗口/新窗口中连接 Vlab。在选择远程平台时选择 **Linux**。 322 | 323 | ![connect](../images/vscode2vlab/vs_vlab2.png) 324 | 325 | 首次连接时会显示“正在下载 VSCode 服务器”。这是正在 Vlab 虚拟机上安装 VSCode 服务器,时间可能比较长,请耐心等待。 326 | 327 | ![wait](../images/vscode2vlab/vs_vlab3.png) 328 | 329 | 下载好后,左下角显示 **SSH:vlab** 即连接成功。 330 | 331 | ![connection success](../images/vscode2vlab/vs_vlab4.png) 332 | 333 | 在上方的**文件->打开文件夹**即可选择要打开的 Vlab 上的文件夹,新建文件同理。 334 | 335 | ![open file](../images/vscode2vlab/vs_vlab5.png) 336 | 337 | 我们也可以用快捷键 **Ctrl + \`** 打开终端,此时的终端环境是 Vlab 的,可以通过命令行对 Vlab 进行操作。 338 | 339 | ![Terminal](../images/vscode2vlab/vs_vlab6.png) 340 | 341 | ## 本地 VSCode 编辑 Vlab 的 Verilog 项目 {#Vlab-verilog} 342 | 343 | 截至目前,我们已经能用本地 VSCode 远程编辑 Vlab 上的文件了。但当我们用 VSCode 打开 Vlab 中新建的 `.v` 文件时,却发现没有了语法高亮。这是因为 Verilog-HDL/SystemVerilog 扩展被定义为在远程扩展主机中运行,故在此工作区中被禁用。我们需要在本地已安装的扩展中找到 Verilog-HDL/SystemVerilog,点击**在 SSH:vlab 中安装**,来启用该扩展。 344 | 345 | ![Vlab Extention](../images/vscode2vlab/vs_vlab7.png) 346 | 347 | 然后我们的 Verilog 代码就有了语法高亮。但当我们编写代码时,会发现前面配置好的 ctags 和 iverilog 失效了:鼠标悬停不显示代码声明,“CTRL 鼠标点击跳转到代码声明”的功能失效,代码的语法错误也不会报错。 348 | 349 | !!! question "为什么?" 350 | 这是因为此时的 Verilog-HDL/SystemVerilog 插件使用的是 Vlab 中安装的,所以需要对 SSH:vlab 中的该插件进行同本地的配置。 351 | 352 | 我们要在 Vlab 中安装 ctags 和 iverilog(和 gtkwave)。在 **Vlab 虚拟机** 中打开终端,执行以下命令: 353 | 354 | ```shell 355 | sudo apt update 356 | sudo apt install iverilog gtkwave universal-ctags 357 | ``` 358 | 359 | 然后在 VSCode 已打开的远程连接 Vlab 中打开 Verilog-HDL/SystemVerilog 的扩展设置,将**远程 [SSH:vlab]**和**工作区**中同[本地配置](#config-extension)(即“用户”一栏中的配置)进行设置。 360 | 361 | ![Config Extention](../images/vscode2vlab/vs_vlab8.png) 362 | 363 | 完成后,我们就可以在本地 VSCode 对 Vlab 中的 Vivado 设计文件进行编辑了! 364 | 365 | ![finish](../images/vscode2vlab/vs_vlab9.png) 366 | --------------------------------------------------------------------------------