最近入了一套树莓派3全家福 还挺好吃的 比土好吃


本文记录一些使用 Raspberry Pi 的过程中遇到的问题,还有作为备忘,不定期更新。

####系统设置
#####一般信息设置
一般信息可通过 Raspberry Pi 自带的工具来设置,比如自动登录,开机终端模式:

1
sudo raspi-config

####账户/权限/等相关修改
#####解锁 root 账户
树莓派使用的linux是debian系统,所以树莓派启用root和debian是相同的。
debian里root账户默认没有密码,但账户锁定。
当需要root权限时,由默认账户经由sudo执行,Raspberry pi 系统中的Raspbian
默认用户是pi 密码为raspberry
重新开启root账号,可由pi用户登录后,在命令行下执行

1
sudo passwd root

执行此命令后系统会提示输入两遍的root密码,输入你想设的密码即可,然后在执行

1
sudo passwd --unlock root

这样就可以解锁root账户了。

#####修改用户名
Linux 更改用户名不像Windows 重命名那么简单,首先你要知道在Linux中创建了一个用户,除了生成UID外还会有一个GID,当你对原用户名修改后,别忘了对GID也进行更新。

修改用户名:
以root身份登录,然后使用下列命令进行修改

1
usermod -l NewUser -d /home/NewUser -m OldUser

-l 修改用户名
-d 修改登录后使用的路径
-m 修改登录名称的同时将目录名称一同修改

修改组名称:
继上面操作后,继续执行下列命令

1
groupmod -n NewUser OldName

-n 修改组的名称


另外其实也可以通过直接修改文件的方式来修改用户信息,可参照这篇文章

####远程操控
#####ssh 登录
首先打开树莓派,并且让你的树莓派连上网。接着从路由器的客户端列表里面找到你的树莓派 iP 地址。又或者利用 nmap 命令(下面会提到)来查找 RaspberryPi 的 ip 地址。


然后在终端利用 ssh 登录:

1
ssh pandara@192.168.0.136

为了以后登录方便,不用输入密码,可以使用私钥登录。生成密钥对,公钥和私钥:

1
ssh-keygen -t rsa

保存位置直接选默认,这样生成的私钥为 ~/.ssh/id_rsa
然后,将公钥 ~/.ssh/id_rsa.pub 拷贝到树莓派的 ~/.ssh/authorized_keys:

1
ssh-copy-id pandara@192.168.0.136

#####TightVNC
安装tightvnc server,设置8位最长的登录密码,这个密码将在连接的时候使用。然后直接用命令启动一个 server:

1
tightvncserver

也可以指定一个分辨率

1
tightvncserver -geometry 800x600

图方便的话,也可以将这个命令放在启动 shell 里面执行。


然后在 client 用 tightvnc viewer 连接,需要知道ip,端口从5900开始,我用的时候是5901,这个跟登录系统的账号有关。

#####利用 nmap 查找 RaspberryPi 的 ip 地址
方法一
打印 ip 地址与 mac 地址的对应关系:

1
sudo nmap -sP 192.168.0.0/24 | awk '/Nmap scan report for/{printf $5;}/MAC Address:/{print " => "$3;}' | sort

然后会得到类似下面的输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
192.168.0.1 => 88:25:93:63:6E:2C
192.168.0.103 => 48:43:7C:02:92:C4
192.168.0.113 => 00:88:65:40:6F:FA
192.168.0.114 => 54:9F:13:74:D3:BB
192.168.0.116 => 80:E6:50:07:D8:86
192.168.0.118 => 14:10:9F:E6:03:A7
192.168.0.120 => D0:A6:37:D9:40:BA
192.168.0.125
192.168.0.126 => 4C:7C:5F:1E:83:AB
192.168.0.127 => B8:E8:56:7F:6E:A4
192.168.0.128 => 8C:58:77:57:49:42
192.168.0.130 => CC:FA:00:A9:BA:2C
192.168.0.133 => BC:60:A7:07:B6:81
192.168.0.134 => 28:CF:E9:10:AE:6F
192.168.0.136 => B8:27:EB:10:84:F1
192.168.0.140 => F4:5C:89:A6:2A:33
192.168.0.141 => 38:BC:1A:16:3C:31
192.168.0.143 => 28:C6:8E:0B:5E:97
192.168.0.146 => F0:B4:79:1A:75:FE
192.168.0.147 => C8:69:CD:6F:11:EB

接着对应上你的 wlan 或者 eth 网卡的 mac,就查找到 RaspberryPi 的 ip 了。


方法二
stackOverFlow 上还有一种更加简便的方法:

1
nmap -sP 192.168.0.0/24 |awk -v mac="b8:27:eb:10:84:f1" '/report for/{ip=$5}$0~mac{print ip}'

不过我没成功,估计是哪里有问题,暂时没时间研究。


有关 nmap 的参考资料:
网络扫描和嗅探工具之Nmap
Nmap速查手册

#####vim+Python
树莓派默认安装的 vim 在编译时貌似没有加入对 Python 的支持,所以折腾起来有点麻烦。没办法只好删掉自己重新编译。卸载:

1
2
3
4
5
6
7
sudo apt-get remove vi
sudo apt-get remove vim
sudo apt-get remove vim-runtime
sudo apt-get remove gvim
sudo apt-get remove vim-tiny
sudo apt-get remove vim-common
sudo apt-get remove vim-gui-common

下载 vim 源码:

1
wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2

然后解压:

1
tar -xjvf vim-7.4.tar.bz2

进入资源目录:

1
cd ~/DownLoads/vim74

设置编译属性,注意将 --with-python-config-dir 后面的值替换为自己的 python 路径,我的是 ‘/usr/lib/python2.7/config-arm-linux-gnueabihf/‘,原文中使用的配置如下,后来出现了问题,所以我做了删减,保留我必须的。这是原文的配置:

1
./configure --with-features=huge --enable-rubyinterp --enable-pythoninterp --with-python-config-dir=/usr/lib/python2.7/config-arm-linux-gnueabihf/ --enable-perlinterp --enable-gui=gtk2 --enable-cscope --enable-luainterp --enable-perlinterp --enable-multibyte --prefix=/usr
  • –with-features=huge:支持最大特性
  • –enable-rubyinterp:启用Vim对ruby编写的插件的支持
  • –enable-pythoninterp:启用Vim对python编写的插件的支持
  • –enable-luainterp:启用Vim对lua编写的插件的支持
  • –enable-perlinterp:启用Vim对perl编写的插件的支持
  • –enable-multibyte:多字节支持 可以在Vim中输入中文
  • –enable-cscope:Vim对cscope支持
  • –enable-gui=gtk2:gtk2支持,也可以使用gnome,表示生成gvim
  • –with-python-config-dir=/usr/lib/python2.7/config-i386-linux-gnu/ 指定 python 路径
  • –prefix=/usr:编译安装路径


我自己的配置:

1
./configure --with-features=huge --enable-pythoninterp=yes --with-python-config-dir=/usr/lib/python2.7/config-arm-linux-gnueabihf/ --prefix=/usr

需要重新配置可 输入 make distclean #清理一下上一次编译生成的所有文件。
我在这一步收到报错:

1
2
3
4
5
...
no terminal library found
checking for tgetent()… configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with –with-tlib.

但是我想要安装 libncurses5-dev 的时候,又提示我另外的错误:

1
2
3
4
5
The following packages have unmet dependencies:
libncurses5-dev : Depends: libtinfo5 (= 5.9-10) but 5.9+20140913-1 is to be installed
Depends: libncurses5 (= 5.9-10) but 5.9+20140913-1 is to be installed
Depends: libtinfo-dev (= 5.9-10) but it is not going to be installed
Depends: ncurses-bin (= 5.9-10) but 5.9+20140913-1 is to be installed

于是手贱的我异想天开,决定 remove 掉这些库,然后当我 remove 掉 libtinfo5 这个库,发现 apt-get 命令都找不到了…于是只好又要装回来,先安装
安装 gnupg:

1
2
3
cd ~/DownLoads
wget http://mirrors.aliyun.com/raspbian/raspbian/pool/main/g/gnupg/gnupg_1.4.20-6_armhf.deb
sudo dpkg -i gnupg_1.4.20-6_armhf

安装 raspbian-archive-keyring:

1
2
wget http://mirrors.aliyun.com/raspbian/raspbian/pool/main/r/raspbian-archive-keyring/raspbian-archive-keyring_20120528.2_all.deb
sudo dpkg -i raspbian-archive-keyring_20120528.2_all.deb

安装 apt:

1
2
wget http://mirrors.aliyun.com/raspbian/raspbian/pool/main/a/apt/apt_0.9.7.9+rpi1+deb7u7_armhf.deb
sudo dpkg -i apt_0.9.7.9+rpi1+deb7u7_armhf.deb

接着尝试安装 libncurses5-dev 失败,按照提示执行了这个命令:

1
sudo apt-get -f install

最终无力折腾,选择重装 RaspberrPI…
——–重装的分割线———
要注意的是安装 vim-nox 跟 python-dev 的时候国内的软件源都无法满足,需要使用树莓派默认的软件源,可参照下面软件源章节。之后跟着第4篇教程走,一切顺利。


接着安装 YCM,github 上 YCM 的 readme 也有详细的安装说明。


最后根据第5篇教程添加一些需要的插件,配置成一个完全体。但是第5篇教程中提到的关于安装有 python support 的 vim 的方法并不正确。


好吧,内容好像太多了,我需要新开一篇文章来谈谈我的 vim + Python 配置。

这部分参考了这几篇教程:
1.Linux中源码安装编译Vim
2.启用 VIM 中的 Python 自动补全及提示功能
3.Building Vim from source
4.Raspberry Pi install Vim and YouCompleteMe
5.Vim与Python真乃天作之合

####文件拷贝
将某个文件夹里的所有文件,包括隐藏文件,都复制到其他地方:

1
cp -R /home/usera/. /mnt/temp


vim上手技巧
1.这是一篇我用的比较多的 vim 命令速查汇总帖:链接


2.转贴自知乎上的答案

  • 不按Esc而是按^[或者^c,速度快很多
  • 学会几个定位键的区别:0, $, {, }, g, G, w, e, b…
  • o, O分别是当前位置下面/上面插入一个新行并进入插入状态
  • Shift+V选定几行,然后用 一起移动
  • Ctrl+V选定行首或行尾的字符,然后用shift+i做插入,或者shift+x做删除
  • 学会用y,d 和p, P做粘贴剪切
  • 学会用^W的窗口操作。打开文件用sp或者vs
  • 学会记录宏的命令。用q加任意键开始录制,再按q保存。然后可用@加这个任意键回放,在@前加数字可定义回放次数。
  • “.”重复上一个命令,”u”取消上一个命令,”^r”反取消
  • ^n, ^p用buf里的关键词补全。
  • 学会搜索替换”:%s/要搜的东西/要换成的东西/g”
  • 任何时候移到一个单词上按#的话可以高亮这个文档里所有一样的单词
  • 用“/”做搜索, 按n或N 上一个/下一个
  • “:!命令 &”可直接运行这个命令,用”:!命令 %&”如果你想让这个命令对当前所编辑文件做操作。
  • 任何时候可用”:cd %:p:h”来切换目录到当前编辑文件所在目录。

#####翻墙
主要参考这篇文章,利用 shadowsocks 的命令行程序。

  • 安装 pip
  • 安装 shadowSock
  • 编辑服务器信息 json 文件
  • 启动命令
    1
    sslocal -c /home/Pandara/shadowsocks/shadowsocks.json
    可以添加一个 alias 来快速启动:
    1
    vim ~/.bashrc
    在最末尾添加:
    1
    alias ss='sslocal -c /home/Pandara/shadowsocks/shadowsocks.json'
    需要翻墙时,在终端输入 ss 就可以了。

####其他
#####软件源修改
这里有一些国内的镜像源:树莓派及其他硬件平台国内外Linux镜像站全汇总,我选用了 阿里云 跟 搜狐 还有一些大学的源:

1
vim /etc/apt/sources.list

添加下面这些:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
deb http://mirrors.aliyun.com/raspbian/raspbian/ wheezy main non-free contrib
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ wheezy main non-free contrib

deb http://mirrors.sohu.com/raspbian/raspbian/ wheezy main non-free contrib
deb-src http://mirrors.sohu.com/raspbian/raspbian/ wheezy main non-free contrib

deb http://mirror.sysu.edu.cn/raspbian/raspbian/ wheezy main contrib non-free
deb-src http://mirror.sysu.edu.cn/raspbian/raspbian/ wheezy main contrib non-free

deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ wheezy main contrib non-free
deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ wheezy main contrib non-free

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ wheezy main contrib non-free
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ wheezy main contrib non-free

然后执行:

1
sudo apt-get update

另外,有时候可能遇到一些依赖的版本无法被满足:

1
2
3
4
The following packages have unmet dependencies:
vim-nox : Depends: vim-common (= 2:7.3.547-7) but 2:7.4.488-7 is to be installed
Depends: libperl5.14 (>= 5.14.2) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

这时候就要将树莓派默认的软件源给添加回来,一般都能满足:

1
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi