桌面版 ubuntu & debian 踩坑
debian 安装时
是否使用网络安装一定要选是,然后选 163 源,否则后面安装虽然说默认从本地 iso 安装但 kde 之类的东西实际上还是远程安装,默认的国外源非常慢。
debian 安装 vmware-tools
先到
etc/apt/sources.list
里面把光盘源删掉,并保证里面剩余的源来自 163。安装编译其他依赖:
1
apt-get install autoconf automake binutils cpp gcc linux-headers-$(uname -r) make psmisc
点击 vmware 外界面中的「安装 vmware tools」,弹出文件夹后以命令行方式运行
vmware-install.pl
,一路回车,重启搞掂。
python 版本问题
ubuntu 的 python2 和 python3 是共存的,带来一系列问题
要用 python3 需要写
python3
而不是 python,有点麻烦,可以通过 alias 解决。某些 python3 下的模块用 pip3 装以后不能直接用,因为 python3 不在用户变量里面,需要加进去
1
export PATH=/usr/lib/python3/dist-packages/:$PATH
然后用 pip 装模块的时候需要在前面加 sudo。
语言问题
ubuntu 可以直接在设置里面换源。换源之后再添加语言,添加后退出一遍就能看到。
设置为中文后会提示你要不要把用户文件夹里的子文件夹改成中文。最好不要。
root 用户问题
桌面版的 debian&&ubuntu 默认都没有开启 root 用户,取而代之的是给当前用户 sudo 的权限。
想要开启 root 用户可以直接 sudo passwd root 搞定。不过即使这样登录的时候也不能直接用 root 而是只能在登录普通用户后用 su
切换。
另外还有一个问题,那就是系统变量/alias。只有 root 用户的话写在 /root/.bashrc
或 /root/.profile
下就好了。而现在应该写在具体用户目录下的这两个文件内,即 %HOME/.bashrc
或 %HOME/.profile
,但此时一旦使用 sudo
或者用 su
切换到 root 下时,这两个系统变量就会失效。解决方法是把内容写到 /etc/bashrc
或 /etc/profile
下,这两个目录下的文件名前面没有 .
,也就是不隐藏的。
sudo 很麻烦但非常常用,许多命令不用 sudo 的话会报错和显示找不到(特别是新装了个新软件结果发现敲命令提示 no found,不是没装好而是没用 sudo),比如 ifconfig
和 service
,还有 make install
也需要 sudo 才能顺利安装。
因为帐号一开始就有 sudo 权限,实际上在 debian 中帐号已经写入 visudo
中了。如果需要 sudo 不设密码的话,直接加 NOPASSWD:
,比如:
1 | zbttl ALL=(ALL:ALL) NOPASSWD:ALL |
另外还有些 gui 下的软件需要 root 模式下启动(比如 vscode),可以用 sudo [软件名] &
启动,比如
1 | sudo wireshark & |
如果不知道软件名,可以打开后用 top 查看。
另外,还有特殊一点的,vscode 的某些插件需要 root 下才能生效(比如换背景那个插件),但使用 sudo 打开的话,没办法读取当前用户的配置,就没法生效。正确的办法是:参考文章
1 | chown -R 你的用户名 /usr/share/code |
文件浏览器 root 开启,以及开启地址栏
没有 root 模式的话很多文件没法直接复制粘贴。
ubuntu:安装 nautilus-admin
1 | sudo apt-get install nautilus-admin |
刷新一遍 natuilus
1 | nautilus -q |
然后就可以右键管理员模式打开文件夹了。
原来的地址栏可以通过 ctrl+l 打开全路径编辑样式,但我倾向于一直开着而不是使用默认的块状路径样式。
安装 dconf-editor
1 | sudo apt install dconf-editor -y |
打开后,按下 ctrl+L,进入路径 /org/gnome/nautilus/preferences/
开启 always-use-location-entry
这项即可。
wireshark 安装
参考文章:【Tools】Wireshark 在 Linux 系統下的安裝及使用
wireshark 可以通过 apt 安装旧版,也可以通过 ppa 安装新版。安装时会出现弹窗,大概意思是要不要授予非 root 用户监听权限,选 yes。
之后
1 | sudo vim /etc/group |
找到 wireshark 这一行,冒号后面添加当前用户,比如
1 | wireshark:x:124: |
改为
1 | wireshark:x:124:zbttl |
重启即可。
vscode 点击关闭按钮整个界面卡死
20.7.2 在 code-insiders 可复现。
解决方法:
先关掉 code-insiders。通过其他 tty 或者 ssh 链接,使用命令
top
,一般前两个 cpu 占用大户,即 code-insider 和 gnome-shell,是本次卡死问题的主角,记住他们的进程号(pid)。强行关闭 code-insiders。
1
kill -9 [code-insiders pid]
获取 gnome-shell 重启指令
1
ps -ef | grep gnome-shell
一般会出好几条,找到对的上上面卡死的 gnome-shell pid 的那条,一般是
1
/usr/bin/gnome-shell
干掉 gnome-shell
1
kill -9 [gnome-shell pid]
重启
1
/usr/bin/gnome-shell
此时如果用的 xshell,估计会叫你下载 xmanager,不用管,取消就好。然后实际那边应该就能动了。
zsh
直接参考 19.4.14 的 termux 文章。。。
结果发现不太对,很多细节对不上,重写吧。那篇文章详细写的部分我就一笔带过。
安装
1 | sudo apt install zsh -y |
第一次打开会弹出欢迎界面(仅桌面端),提醒你对 zsh 进行一些设置
当然你可以选 1 看看,但由于后面我们装了 Oh My Zsh 后这些设置就没用了,所以推荐选 2 就行了。
坑 1:修改默认 shell
1 | chsh -s zsh |
提示需要输入密码。如果是 vps,这时别不输入密码就退出了!否则 ssh 和 vnc 都进不来了。。。只能重装。(另外,也可以执行完下面的步骤再来运行这个指令)。
但输入密码后大概率会提示 zsh 无效。
参考这里的解决方案:chsh always asking a password , and get PAM: Authentication failure
1 | vim /etc/pam.d/chsh |
将
1 | auth required pam_shells.so |
改为
1 | auth sufficient pam_shells.so |
或者直接运行:
1 | sudo sed s/required/sufficient/g -i /etc/pam.d/chsh |
如果仍然错误(提示 shell 不存在 chsh: Warning: zsh does not exist
),查看一下 shell 列表:
1 | cat /etc/shells |
然后使用 which zsh
看一眼。
看起来得改改命令:
1 | sudo chsh -s /usr/bin/zsh zbttl |
再去 /etc/passwd
看看,或者用下一个命令刷新生效(也许还需要重启,vps 一般直接用 root,所以断开重连就行,下面再涉及这个操作,我都用重连来替代)后使用 echo $shell
,确认已经在使用 zsh 了。
1 | source ~/.zshrc |
安装 oh my zsh,更换主题。
1 | sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" |
转换为 zsh 后,之前的 bash 里的历史记录不再显示,但可以迁移过来。
1 | wget https://gist.githubusercontent.com/goyalankit/a1c88bfc69107f93cda1/raw/ed58ae6b8929021353001b1826694780c033291a/bash_to_zsh_history.rb |
坑 2:字体支持
之后重连,进入 p10k 设置界面,来了。这个坑在 vps 端和桌面端都有。vps 端,只要 vps 控制端(windows,windows 下字体相当好装)装好 powerline 的字体,问题都不大。但 vps 端本身也有问题,问题出在 xshell 等 terminal 上:xshell 在 powerlevel10k 的设置中无法进入 prompt style 这项中(一路下一步你发现没有这项),最后设置完效果是纯字符型的,不好看;但如果从能够弹 prompt stlye 的地方设置好了,再从 xshell 进入你会发现显示没问题(我在本地端的 debian 上开开 ssh 然后用 xshell 链接发现了这个问题)。
那么 vps 远程端没办法实机登录(vnc 下字体不好设)怎么办呢,换个 terminal 就好了。windows terminal 并未出现这个问题。
单纯的桌面端,debian 下安装字体比较麻烦。直接从字体管理器安装字体会直接卡死,得手动命令行装。将字体放到某一个文件夹中,在文件夹内打开终端。
1 | sudo mkdir /usr/share/fonts/truetype/CustomizedFonts |
重启后在终端启用新字体即可。另外字体可以从我以前写的 powershell 攻略中的 nerd fonts github 项目内获取。我也尝试过用那个方法手工做的 Cascadia Code,后来发现会导致错位,还是直接用官方的好。
另外字体以显示(控制)端为准,也就是即使 vps 远程端装好了字体,控制端没装好也是乱码;反之亦然。
坑 3:系统 / 用户变量 /alias
参考文章:
其实也不能算个坑,可以说是个 feature。
我们先了解一下 linux 这个系统变量是怎么整的:
- 用户变量:只对当前用户有效,放在用户目录下,文件以隐藏形式呈现(前面加.)
- rc 文件:启动终端时加载,如默认的
.bashrc
,zsh 的.zshrc
。一般放快捷路径(alias)。 - profile 文件:登录后第一次打开终端加载,如默认的
.profile
,zsh 的.zprofile
。一般放懒得使用 systemd 或 supervisor 启动的自启程序,以及系统/用户变量(export xxx)。but,从图形界面运行的终端默认不加载这个文件,如果要加载,需要在终端中找到类似「以登录 shell 方式运行命令」的选项。当然有种说法,这么干会搞乱登录环境,那么对于这些变量,也可以直接写在 rc 文件中(后果是反复用 source 或者打开多个终端的时候,查看变量的话会发现重复加载了若干个写在 rc 文件中的变量,但并没有什么严重的后果;而自启程序就用 systemd 等替代就好了)。
- rc 文件:启动终端时加载,如默认的
- 系统变量。对所有用户起效。放在
/etc/
目录下,不一定是某一个文件(默认文件名和系统有关),也不一定直接位于/etc
下(zsh 就位于/etc/zsh
下)。和用户变量不同,不需要隐藏。- rc 文件。默认的可能是
bash.bashsrc
;zsh 固定为zshrc
; - profile 文件:默认为
profile
;zsh 为zprofile
。
- rc 文件。默认的可能是
所以,接下来我所讲的部分变量设置我将以放在 /etc/zshrc
处写命令,而重连则使用
1 | sudo source /etc/zsh/zshrc |
坑 4 :zsh 下 ssh 键位错误
小键盘区和功能键区在 zsh 下功能错误。这次就不是 xshell 的锅了,ssh 过去的都这个毛病。解决方法有两种:
通过 xshell。在属性中,选择终端->终端类型,改为 linux。
在
/etc/zsh/zshrc
中加入1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
bindkey "\e[5~" beginning-of-history
bindkey "\e[6~" end-of-history
# for rxvt
bindkey "\e[8~" end-of-line
bindkey "\e[7~" beginning-of-line
# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
bindkey "\eOH" beginning-of-line
bindkey "\eOF" end-of-line
# for freebsd console
bindkey "\e[H" beginning-of-line
bindkey "\e[F" end-of-line
# completion in the middle of a line
bindkey '^i' expand-or-complete-prefix
# Fix numeric keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
bindkey -s "^[OM" "^M"
# 1 2 3
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + - * /
bindkey -s "^[Ol" "+"
bindkey -s "^[Om" "-"
bindkey -s "^[Oj" "*"
bindkey -s "^[Oo" "/"重连生效。
接着装一堆插件
1 | sudo apt install python |
坑 5:因不正常关机导致 zsh history 报错
1 | cp .zsh_history zsh_history |
最后一句是仅存在于zsh中的fc语句,意思是从某文件中读取历史记录
另外 zsh 还有个 feature(但不一定每一次都能触发),复制粘贴多行的时候并不会和传统 bashrc 一行行运行而是堆在一起,回车时才会一起运行。好处是如果是几句常用的命令,利用上下方向键找历史记录时会直接找到拼成一块的这几个语句;坏处是利用 history 查看历史的时候看见这些句子被拼成一句,中间用 \n
做间隔,直接复制出来没法用,得自己处理。
debian 和 ubuntu 显著区别(以及 debian ppa 使用)
debian 的内核比较旧而稳定,ubuntu 通常用的是最新内核。旧内核也有好处,bbr 和锐速,以及 fullcone 的那个内核组件比较好装。
debian 以下操作均只能通过命令完成:
- 换源
ubuntu 在非 root 状态下使用的命令若尚未安装,会给一句 apt 命令提示告诉你应该装啥。
ubuntu 的文件管理器的地址栏切换为可复制的文字路径的方法很隐蔽,需要快捷键 ctrl+L。当然也有办法让其一直工作在可复制文件路径下。需要先安装 dconf-editor。
1
apt install dconf-editor -y
搜索应用程序 dconf,就能看到 dconf 系统配置编辑器。打开后从 org –> gnome –> nautilus –> preferences 进入就能看到相关选项了。
debian 没有 ppa 功能,虽然也能用,但比较麻烦(但因为 ubuntu 内核新 ppa 里面有些内容也很新,所以 debian 死活装不上,比如最新的 wireshark,
而旧版 wireshark 无法探测到本地的网卡,导致其实没法用。debian 下 ppa 的具体使用方法参考这里:在 Debian 上添加 PPA 并安装软件包。文章中有一部比较难以理解:1
$ sudo sed -i 's/disco/bionic/g' /etc/apt/sources.list.d/lazygit-team-ubuntu-daily-disco.list
实际上就是进入
/etc/apt/sources.list.d
,在上一步 ppa 中会下载两个跟你要装的软件相关的源文件,里面的系统名太新了(比如我下到的就是 groovy,而上面那行代码是 bionic,作者选择替换成当时最新的 lts bionic 系统)可以 wiki 查看,选择一个合适的版本。另外也可以通过软件 ppa 页面,查看当前版本是否有相关的包,比如 wireshark 界面:
很明显确实没有最新的 groovy 版本,而只有上一个版本 focal 版,那么我们可以改成 focal 或者直接复制粘贴图中的两行代码。
另外也可以翻翻 sid 包,有没有相关的包,我反正翻到 sid 包里面也有 wireshark 的最新版本。
从这里找一个最近的源,比如 http://ftp.cn.debian.org/debian,按网页顶上的要求拼接一下。为了避免和正常源混在一起,我们新开一个源文件,命名为 sid.list。
1
2
3sudo sh -c 'printf "deb http://ftp.cn.debian.org/debian sid main " > /etc/apt/sources.list.d/sid.list'
sudo apt update
sudo apt -t sid install wireshark -y但很遗憾,无论用 ppa 直接安装,ppa 直接编译还是 sid 源的方法安装 wireshark 都报错,依赖不对,估计手动编译也是一样的结果。
(12.22 更新) 过期的 ubuntu
虚拟机的 ubuntu 是去年才装的。
看了一下 ubuntu 有普通版和 long-term 版,long-term 版?应该是和 windows ltsb / ltsc 一个性质的东西吧。
「装在虚拟机里面的东西要什么 long-term,给我来最新的」然后我就装了 19.10。
结果最近 apt update 总是报错,说是什么
仓库 “http://mirrors.tuna.tsinghua.edu.cn/ubuntu eoan-updates Release” 没有 Release 文件。
是不是清华的源又整活了?用「软件与更新」换个源看看。
结果选择最佳服务器的时候就告诉我网络有问题(肯定不是网络原因,科学和 dns 这些我熟的很),退出的时候整个软件直接崩了。。。
兜兜转转我得出一个结论:这个 ubuntu 版本今年 7 月过期,连着源一块过期访问不到了。(这比 windows 10 版本寿命还短)
怎么办?尝试升级,好在和 window 不一样,普通版本也能升到 lt 版,升到 lt 版不折腾了。
关键是升级前要 apt update 的啊,这 apt update 都运行不了怎么办?
apt update 失效
参考 Unable to ‘apt update’ my Ubuntu 19.04,旧的源过期了不过会存档起来,但网址也改了。但我用的是镜像源,镜像源我猜不会改网址而是直接删库。。。保险起见找一下初始源。结果没找到官方的,找到一个这样的:malikalichsan/sources.list
瞄了下大概的地址格式
1 | deb http://id.archive.ubuntu.com/ubuntu/ eoan main restricted |
用 vscode 把 archive 批量替换为 old-releases
1 | deb http://id.old-releases.ubuntu.com/ubuntu/ eoan main restricted |
update 一看,找不到仓库。对比一下网上的其他源地址,我们这个地址前面的 id 好突兀,删掉
1 | deb http://old-releases.ubuntu.com/ubuntu/ eoan main restricted |
成了。
do-release-upgrade 也失效
ubuntu 也有专属的系统更新命令,那就是 sudo do-release-upgrade
。然后我运行了一边,又告诉我没网络了。。。。
1 | Failed to connect to https://changelogs.ubuntu.com/meta-release. Check your Internet connection or proxy settings |
继续问谷歌:Failed to connect to http://changelogs.ubuntu.com/meta-release-lts after upgrade
说是删掉 /var/lib/ubuntu-release-upgrader/release-upgrade-available
这个文件,然后用 /var/lib/ubuntu-release-upgrader/release-upgrade-motd
这个程序再获取一遍地址。
没用,甚至运行这个 release-upgrade-motd
直接报错无网络。
算了,直接大力出奇迹好了。用 debian 的更新方法。
但话说 ubuntu 最新 lts 的版本缩写在 url 内怎么表示?等等上面那个报错信息里面不是有个网址。
打开看看。
很好,直接换:
1 | sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak |
更新:
1 | sudo apt update&&sudo apt upgrade&&sudo apt dist-upgrade |
收工。