ICS-PA日记-PA0
这学期选了大名鼎鼎的 ICS,在刘杰老师班做 RISC-V 的 PA 实验。写一篇博客,来记录踩过的坑和心路历程。
PA 实验手册可参考:PA 实验手册
PA 0 主要是环境的安装和配置,我采取的方案是 MacOS 用 Windows App 连接阿里云服务器 (Ub
untu 22.04) 做实验。本来以为在计算机网络课上完之后,对配置远程连接已经不在话下。但是还是遇到了一些问题。
在希望的道路上,曲曲折折的前进
运行环境搭建
1. 环境准备
-
云服务器:阿里云 Ubuntu 20.04
-
用户:
kasumi(非 root,避免直接用 root 破坏环境)- 之前的计网实验我都是用 root 账户做的,还沾沾自喜不用 sudo 真方便,现在看来是隐患极大的…
-
桌面环境:xfce 4 + xrdp
- 配置远程桌面 GUI,是为后面的 PA 需要一些图形化内容做准备。这个方案我的 Windows 和 Mac 都可以很方便访问阿里云的 Ubuntu,很方便我做实验
和玩耍
- 配置远程桌面 GUI,是为后面的 PA 需要一些图形化内容做准备。这个方案我的 Windows 和 Mac 都可以很方便访问阿里云的 Ubuntu,很方便我做实验
-
目标:能跑
make menuconfig,配置并启动 PA 框架。
2. 安装和基本配置
(1)依赖安装
1 | sudo apt update |
(2)桌面环境 + 远程
1 | sudo apt install xfce4 xfce4-terminal xrdp |
- 修改
/etc/xrdp/startwm.sh,最后几行改成:
1 | . $HOME/.xsessionrc |
我最终使用的大概是
1 | 1 #!/bin/sh 2 # xrdp X session start script (c) 2015, 2017, 2021 mirabilos |
3. 第一次坑:make menuconfig 报 .config does not exist!
- 解决:这是正常提示,只要执行一次
make menuconfig生成.config就行。
4. 第二次坑:Gtk-WARNING **: cannot open display
原因
DISPLAY没有配置好- DBus 没有启动,
DBUS_SESSION_BUS_ADDRESS环境变量为空- 我在尝试通过远程桌面启动桌面端应用时候,通过指令
sudo journalctl -u xrdp -e查看错误日志发现的这个错误。
- 我在尝试通过远程桌面启动桌面端应用时候,通过指令
解决方案
在 ~/.xsessionrc 写入:
1 |
|
然后重新登录 xrdp 会话。
这一步解决了 xfce 4-terminal 打不开 的问题。
5. 第三次坑:fail to load $DBUS_SESSION_BUS_ADDRESS
原因
-
没有在
.xsessionrc里启动dbus-launch -
或者
xrdpsession 和dbussession 不在同一个作用域
解决方案
同样通过 .xsessionrc 写自动启动脚本(见上)。
重新登录之后再用:
1 | echo $DBUS_SESSION_BUS_ADDRESS |
能看到 unix:abstract=/tmp/dbus-xxxx 这样的路径,就说明成功了。
6. 第四次坑:.xsession vs .xsessionrc
-
.xsession:定义启动桌面会话执行的主程序,比如exec startxfce4 -
.xsessionrc:放环境变量配置(DBus、XDG、DISPLAY 等),会在.xsession之前加载 -
正确做法:不要把 dbus 配置写到
.xsession,应该写在.xsessionrc
7. 最终状态检查
1 | echo $DBUS_SESSION_BUS_ADDRESS |
能正常打开 xfce4-terminal,make menuconfig 也能弹出界面,说明环境搞定。
总结
这次 PA 0 配置踩的几个关键坑:
- menuconfig 缺 .config → 实际是正常情况
- cannot open display → 缺少 DISPLAY 和 DBus
- DBUS_SESSION_BUS_ADDRESS 丢失 → 需要在
.xsessionrc启动 dbus - 混淆 .xsession 和 .xsessionrc → 前者执行桌面,后者放环境变量
github clone 不了怎么办?
由于国内网络环境,配置好 ssh 后使用 ssh -T git@github.com ping 不同,总是超时。而密钥已经检查无误,使用 ssh -T git@gitee.com 也可以正常 ping 通,这时想起是不是和 github 的网络连接出现了问题,最后使用 ipaddress 查询 github 的地址写入 host 总算解决了。
国内特殊网络环境主要是用 DNS 污染来阻碍访问 github,我们可以用接代理、写 host 的方式解决。这里采取比较简单的后者,且可以解决我的问题。
具体来说:
查询 github ip 地址

图中的 140.82.114.4 就是 github 的真正 ip 地址
写入 host 文件
ubuntu 的 host 文件存储在 /etc/hosts 文件中,只需要该文件末尾加一行
``140。82.114.4 (你查询到的地址)<空格> github.com 即可
- 修改后的示意图

经过测试这样就可以正常 clone ICS 的 github 仓库了。
一些收获
本次 PA 0 还要求阅读关于“怎么提问题”的文章并写读后感,我想对于初次尝试的同学,结合自己配环境的心得和痛苦,还是很有话说的。


