显示器的处理
我借了我一个同学的显示器,含有VGA以及HDML 双输入的好家伙啊! 然后用一根我那台05年之前的电脑的VGA线,配上我从团队拿回来的HDML转VGA的转换器,好歹是让我的树莓派成功投影到了显示器上。以前都是直接网线连接,搞得我没法给我的树莓派联网,而且前期经常就是一堆子毛病,比如树莓派连接wifi 无法自动获取IP 然后还有就是一些wpa——supplicant的使用配置 简直是日了狗一样的快感啊!幸好这次没出啥岔子,这一步一切顺利
电脑连接VNC
前面大概是6.00--7.30 这一点毫无紧张,因为树莓派没法连上网,接上网线之后不知道是不是因为系统过旧 还是raspberry的系统跟ubuntu的软件的不兼容,但是按道理来说都是linux系列,没道理出问题啊。报错也都没有依赖,给我说的是语法,sysnax 错误, 多了个(还是啥的。反正好烦,结果我的室友刘建勋拉完大便出来 hiahia 一股子臭气跟网络连接成功的ssid 名称就出来了。简直是,爱死了!!!! :D)
iwconfig #查看网络连接状况的,比较详细具体包括ssid 以及一些乱七八糟的其实没卵用的东西
ifconfig #查看本地ip以及一些参数的好命令,这个过程各种惊险简直是无与伦比
还有很多的东西我参考了不少地方,下面给出连接,以及关键字,树莓派 VNC 显示屏 无法连接 ·
对了我还遇到了那个startx不能开启的状况,但是貌似重新
sudo raspi-config
一下,之后选择第三个BOOT Option 然后进去选择第三个或者第四个就OK!
程序员这一行啊。实在是有意思,莫名其妙的可能就Debug了。就跟一个闹气的女朋一样的!
另外有一些很有用的文章
http://www.zhihu.com/question/20764621
还有一篇适合在校大学生玩树莓派的:相当经典,我觉得要是我来总结,除了一些我自己遇到的比较奇葩的Bug之外,还有一些正常机器不会出的问题之外不会比这个做的更好了。当然,这个也不是万能的,还是要靠自己才是最好的!!
没有显示器可以使用树莓派么,初次安装过程中呢
自动连接wifi设置
wifi这个小妖精折磨的我啊。简直是欲仙欲死,但是就是那么的神奇啊。
Linux 自动启动程序
1.开机启动时自动运行程序
Linux 加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置文件继续引导过程,启动其它进程。通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序。例如:编辑 /etc/rc.d/rc.local 文件(该文件通常是系统最后启动的脚本),在文件最末加上一行“xinit”或“startx”,可以在开机启动后直接进入X-Window。
主要用三种方式进行这一操作:
ln -s 在/etc/rc.d/rc.d目录中建立/etc/init.d/服务的软链接(代表0~6七个运行级别之一)
chkonfig 命令行运行级别设置
ntsysv 伪图形运行级别设置
注意:1.这三种方式主要用于以redhat为基础的发行版
2.如果还不知道运行级别是什么,那么最好先看看相关资料再实验
第一种方式:ln -s 建立启动软连接
在Linux中有7种运行级别(可在/etc/inittab文件设置),每种运行级别分别对应着/etc/rc.d/rc[0~6].d这7个目录
Tips:/etc/rc[06].d其实是/etc/rc.d/rc[06].d的软连接,主要是为了保持和Unix的兼容性才做此策
这7个目录中,每个目录分别存放着对应运行级别加载时需要关闭或启动的服务
由详细信息可以知道,其实每个脚本文件都对应着/etc/init.d/目录下具体的服务
K开头的脚本文件代表运行级别加载时需要关闭的,S开头的代表需要执行
因此,当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在/etc/init.d目录下,然后在/etc/rc.d/rc*.d中建立软链接即可
[root@localhost ~]# ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
此处sshd是具体服务的脚本文件,S100ssh是其软链接,S开头代表加载时自启动
如果需要在多个运行级别下设置自启动,则需建立多个软链接
这种方式比较繁琐,适用于自定义的服务脚本
如果系统中已经存在某些服务(比如安装apache时就会有httpd服务项),可以使用下面的两种方式
第二种方式:chkconfig
如果需要自启动某些服务,只需使用chkconfig 服务名 on即可,若想关闭,将on改为off
在默认情况下,chkconfig会自启动2345这四个级别,如果想自定义可以加上--level选项
上面我们先将sshd服务的所有启动级别关闭,然后使用--level选项启动自定义级别
Tips:--list选项可查看指定服务的启动状态,chkconfig不带任何选项则查看所有服务状态
第三种方式:ntsysv 伪图形
ntsysv和chkconfig其实是一样的,只不过加上了图形而已
启动ntsysv有两种方式,一是直接在命令行中输入ntsysv,二是使用setup命令,然后选择系统服务
默认情况下,当前运行级别为多少,在ntsysv中设置的启动服务的级别便是多少
比如,我当前的运行级别是3,那么我在伪图形界面中选择启动服务后,它的运行级别也会是3
如果想自定义运行级别可使用ntsysv --level方式
以上三种操作需要保证服务脚本文件可执行,并且要有root权限
其中,第一种方式多用于自定义脚本,第二、三种多用于系统已存在的服务
比如ftp、samba、ssh、httpd等等
并且,要做相关设置需要弄清楚运行级别的问题
Tips:如果想手动启动某服务,传统的方式是 /etc/init.d 服务名 start
实际上还可以这样,service 服务名 start
树莓派自动连接WiFi
将USB无线网卡插入树莓派任一USB接口,插上网线,接通电源;在个人电脑上通过ssh连接树莓派,默认帐号是pi,默认密码是raspberry(如何通过ssh连接树莓派,请自行网上查找,当然如果树莓派已配备好了键鼠,也可以本机操作)。
连接成功后,用lsusb命令,可以看到:
可以看到已经识别硬件了,然后再用ifconfig,看到wlan0信息如下:
然后可以开始配置网络了,修改/etc/network/interfaces文件,把它修改成这个样子
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ssid YOUR-SSID-HERE
wpa-psk YOUR-PASSWORD-HERE
主要是添加wpa-ssid和wpa-psk,直接把你要连接的wifi的ssid和对应密码写上就行了。
重启网络
/etc/init.d/networking restart
or: service networking restart
自动连接多个WiFi网络
当你经常切换到不同WiFi网络中时,你可以配置多个WiFi网络,让树莓派能自动连接到可用WiFi网络中。这里就要用到高大上的wpa_supplicant.conf了
修改/etc/wpa_supplicant/wpa_supplicant.conf,下面是我使用的配置文件:
ctrl_interface=/var/run/wpa_supplicant
#ap_scan=1
network={
ssid="wo_shi_yige_wifi_ssid"
scan_ssid=1
psk="wo_shi_mi_ma"
priority=5
}
network={
ssid="pi"
psk="onlyforpi"
priority=1
}
**ap_scan:**1是默认值,因此我注掉了
1:这个模式下总是先连接可见的WiFi,如果扫描完所有可见的网络之后都没有连接上,则开始连接隐藏WiFi。2:会按照network定义的顺序连接WiFi网络,遇到隐藏的将立刻开始连接,因此在这个模式下连接顺序不受priority影响
ctrl_interface:这个文件夹里面存的是一个当前使用的interface的socket文件,可以供其他程序使用读取WiFi状态信息
network:
是一个连接一个WiFi网络的配置,可以有多个,wpa_supplicant会按照priority指定的优先级(数字越大越先连接)来连接,当然,在这个列表里面隐藏WiFi不受priority的影响,隐藏WiFi总是在可见WiFi不能连接时才开始连接。
ssid:网络的ssidpsk:密码priority:连接优先级,越大越优
scan_ssid:连接隐藏WiFi时需要指定该值为1
修改/etc/network/interfaces使用wpa_supplicant.conf来配置无线网络
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
pre-up wpa_supplicant -Dwext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B
以后每次启动时,树莓派都会主动去连接配置文件中预定义的这些wifi网络。
在这个配置里面有一个ssid=’pi’网络,这是一个最低优先级网络,是用来在陌生网络中配置树莓派的。当处 在一个树莓派配置里面的没有的WiFi网络中时,我会自己创建一个叫pi的WiFi,当其他网络都不可用时,树莓派连到这个网络里,然后我便可以ssh进 树莓派,添加网络配置,然后重启,就可以让树莓派加入到新的网络中。
参考文章如下:
树莓派自动连接WiFi - 踏雪无痕何处是 - 博客园
ubuntu下设置开机自启动项 - 风生水起 - 博客园
Linux中设置服务自启动的三种方式 - Nerxious - 博客园
内网外网IP获取以及发邮件
我的主要想法是:要是每次我都得把️我的树莓派连接到电脑上,然后傻逼一样的知道了IP之后再来辛辛苦苦的着wifi链接进去,这他么也太惨了。一点都不符合我极客风范啊!!!!这怎么可以,一定要让树莓派用最低的姿态告诉我它自己的ip wifi名称,然后等待我的临幸。所以就有了用python 写一个发送邮件的代码,然后写一个脚本,一边登陆Wi-Fi,一边把网络信息处理好发送给我,然后我再跟着这个信息去进去VNC界面。另外要把脚本设置为自启动,不然很容易GG的
获取自己内网和外网 ip 地址
通过ifconfig 和grep和 cut 和 curl 命令即可
如下:
ifconfig | grep 'Bcast' | cut -d B -f 1 >> /home/pi/Desktop/ip.log
curl http://members.3322.org/dyndns/getip >>/home/pi/Desktop/ip.log
第一句是找到自己内网Ip
第二句是找到自己外网Ip
发送邮件的程序:
网上有很多做法,通过web.py自带的库来发送邮件最为方便
先配置python +web.py
shell中输入
python
如果显示 Python 2.7.3,说明打开python2成功(如果要退出,ctrl+z)
继续输入import web
如果ImportError: No module named xxx,则未安装web.py
如果不报错,则已安装web.py
安装web.py如下
shell中输入
wget http://webpy.org/static/web.py-0.37.tar.gz
然后 tar -xf web.py-0.37.tar.gz **
然后sudo python setup.py install**
再次尝试**import web ** ,如果不报错,则 安装成功
发送ip到邮箱程序的实现:
在终端中nano mail.py,然后写入这些内容,配置自己的账号密码,如果报错,可能是程序缩进的原因
#!\usr\bin\env python
#encoding: utf-8
import web
#程序通过直接调用web.py里面的库 来实现发邮件
#cc,bcc 使用了默认参数
def send_mail(send_to, subject, body, cc=None, bcc=None):
try:
web.config.smtp_server = 'smtp.163.com' ##邮件发送服务器
web.config.smtp_port = 25 ##不设置将使用默认端口
web.config.smtp_username = '你的邮箱用户名,无@xx.com' ##邮件服务器的登录名
web.config.smtp_password = '你邮箱的密码' ##邮件服务器的登录密码
web.config.smtp_starttls = True
send_from = '你的邮箱账号,[email protected]' ##发送的邮件
web.sendmail(send_from, send_to, subject, body, cc=cc, bcc=bcc)
return 1 #pass
except Exception, e:
print e
return -1 #fail
if __name__=='__main__':
send_to = ['发送给谁']
subject = '邮件标题'
body = '邮件内容\n试一下噻'
cc = ['抄送给谁'] ##抄送
bcc = ['密送给谁'] ##密抄
send_mail(send_to, subject, body, cc, bcc)
配置完成之后,python mail.py 这时候你的邮箱就成功发送了
其中:body 是你在信中要写的内容
注意: 程序调用web.sendmail较慢,估计2s左右。
以下是我的mail.py:
#!\usr\bin\env python
#encoding: utf-8
import web
def send_mail(send_to, subject, body, cc=None, bcc=None):
try:
web.config.smtp_server = 'smtp.163.com' ##邮件发送服务器
web.config.smtp_port = 25 ##不设置将使用默认端口
web.config.smtp_username = 'xxxx' ##邮件服务器的登录名
web.config.smtp_password = 'xxxx' ##邮件服务器的登录密码
web.config.smtp_starttls = True
send_from = '[email protected]' ##发送的邮件
web.sendmail(send_from, send_to, subject, body, cc=cc, bcc=bcc)
return 1 #pass
except Exception, e:
print e
return -1 #fail
if __name__=='__main__':
f=file('/home/pi/Desktop/ip.log')
f1=f.read()
f.close()
send_to = ['[email protected]']
subject = 'connection check'
body = 'hello , xxxx! I am still alive. I will send you an email in another hour.',f1
send_mail(send_to, subject, body)
此时的效果:
你已经收到了你树莓派的内网和外网ip了!
参考文章:
树莓派实战2:发送ip地址到自己邮箱 - make_APP的博客 - 博客频道 - CSDN.NET
树莓派实战一:查询自己内网,外网ip - 综合