Android Pad的生产力开发
最近入手了海信Q5平板, 准备将它改造为类似笔记本的”生产力机器”.
使用AidLearning可以在安卓系统上跑一个Linux子系统, 同时AidLearning内置xfce桌面, 但是在软件生态上Linux for arm还是不尽如人意. 因此我的思路是以台式机作为真正的工作机, 运行远程桌面服务端, 安卓平板作为远程桌面客户端, 搭配蓝牙键盘以及手机作为触控板实现类似笔记本电脑的效果. 需要解决的问题有:
搭建虚拟专用网连接台式机以及安卓平板以及手机
选择好用的远程桌面(服务端以及客户端)
将手机作为触控板接入台式机或者安卓平板
解决安卓平板与台式机之间互传文件的问题
虚拟专用网我使用了单位提供的Easyconnect VPN. 除此之外可以使用蒲公英VPN.
记得后文中出现的各设备的IP为其在VPN中的IP, 不是真实内网中的IP.
远程桌面我使用的系统为Ubuntu 20.04, 其常用的远程桌面有tigervnc/tightvnc, x11vnc, xrdp. 为了避免网络连接丢失时候台式机上运行的程序自动退出, 我只能选择x11vnc, 其余集中远程桌面方案都会在连接
webdav for zotero
zotero官方给的300M云存储空间很快就用完了, 但是发现zotero软件支持用webdav进行云同步, 实现Pad/手机/笔记本/台式机之间文献库的共享, 遂研究如何设置webdav. 其实只要直接去坚果云注册一下就能获得1G免费的webdav空间用于zotero, 但是我怕以后1G的免费坚果云不够用, 所以还是自己搭吧.
连接所有设备我的手机和Pad走的是4G网络, 如果使用自己的电脑或者像树莓派之类的sbc作为webdav服务器, 就需要搭建虚拟专用网(VPN)连接各设备与服务器, 或者将服务器穿透到公网.可以的操作有:
买一台带公网IP的服务器(阿里云学生特惠9.5RMB/月)
去运营商更换带有公网IP的网络套餐, 配置家庭路由器端口转发
花生壳内网穿透(每月1G免费流量)
单位提供的Easyconnect VPN
蒲公英VPN(免费版只能连3个设备)
使用IPv6
webdav服务搭建
系统为Ubuntu 18.04 LTS.
创建webdav目录, 如果后面出现权限错误, 记得给这个目录777或者775的权限.
依赖软件需要安装软件nginx-full(或者ngi
基于RT-Thread控制LED阵列用于光遗传学研究
文件rt-thread/bsp/allwinner_tina/applications/main.c:
#include "rtthread.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TIME_H 24
#define TIME_M 0
#define LED_STACK_SIZE 16
#define LED_PRIORITY 20
#define LED_TIMESLICE 10
unsigned int shutdowntime=TIME_H * TIME_M;
rt_uint8_t st=0x7E;
long timeclose[96]={1, 1 ,1 ,1 ,1 ,1 ,1 ,1 ,
1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,
1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,
SFTP server with LibreOffice
实验室和寝室各有一台电脑, 我又经常会在两台电脑上写同一篇论文, 两台电脑之间的数据同步就成了一个略显头疼的问题. 为此我尝试过在阿里云服务器搭建云编辑器, 但是图片上传以及参考文献插入有变得很麻烦(无法与文献管理软件Zotero协作).
一个解决思路是利用实验室已经搭好的香橙派R1(固定IP)搭建NFS服务器, 但是NFS服务器动态调用端口, 需要在关闭防火墙的方式下使用(或者固定NFS使用的端口, 我失败了). 为了减少电脑被攻破/数据泄露的可能, 我还是选择使用SFTP传输数据(这样服务器端也不需要额外的设置).
sshfs挂载SFTPsudo apt install sshfs -y安装sshfs, 用sshfs 服务器用户名@服务器IP:服务器路径 挂载点挂载SFTP服务器上的目录.为了避免每次输入密码的麻烦事, 可以在服务器端生成公钥给工作电脑, 用sshfs 服务器用户名@IP:服务器路径 挂载点 -o IdentityFile=公钥路径来挂载.也可以ssh-keygen -t rsa生成工作电脑的密钥对, ssh-copy-id -i 工作电脑公钥路径 服务器用户名@I
Arduino IDE: 网页控制ESP8266(NodeMCU)
有一个通过串口控制的LED矩阵, 实验中需要独立控制每颗LED的亮度, 并且每隔几秒就需要点亮LED一下. 同时要做这实验的师姐还不会编程. 因此我需要一个可以不断给串口Rx写入控制信号的单片机, 还需要一个用于修改其中参数的前端.
我选择使用ESP8266作为这个单片机, 同时使用WiFi连接, 使用网页作为前端.
此处记录这个过程中会用到的一些函数.
网络连接STA模式连入局域网#include <ESP8266WiFi.h>
#ifndef STASSID
#define STASSID "HOMEWLAN"
#define STAPASSWD "********"
#endif
void setup(void){
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(STASSID, STAPASSWD);
Serial.println("");
while (WiFi.status() != WL_CONNECTED) {
服务器崩了及其恢复以及服务器数据备份
前几天ssh登录服务器时候发现系统提示有五十几个包可以升级, 其中四十几个安全升级. 我想想也半年多没有升级系统软件了, 这么多包要升级, 那就干脆来个sudo apt update && sudo apt dist-upgrade -y升级系统吧.
今天看到htop提示服务器已经连续运行153天了, 内存占用也升到了五百多兆, 想想我就重启吧, 然后就再也连不上服务器了, 网页也进不去.
最终用阿里云的救援连接(其实是VNC连接)进入了系统, sudo ifconfig发现连网卡都没有了.
惊慌了一个下午, 晚上我开始恢复服务器系统.
操作我在阿里云上找到了三月份的系统快照, 直接回滚.
回滚后终于”久违”地连上了服务器, 检查包括网站以及RStudio web版本都能使用, 随后进行系统升级, 重启验证系统正常.
sudo update && sudo apt dist-upgrade -y && sudo apt autoremove -y && sudo reboot
随后我在自己在家用香橙派zero设置的服务器上
建立IP server来辅助连接电脑
在校园网内每台电脑都有一个动态的IP, 理论上可以通过这个IP远程登录网内任何开放的电脑. 但是要怎么获取这个IP? 内网好像没有免费的DDNS服务器.
思路在IP固定的服务器上创建一个用户ip, 限制其只能使用密钥登录并且无需密码认证, 并将公钥发放至需要连接或者需要获取IP的电脑. 目标电脑定时将IP(ifconfig)信息发送给服务器(scp), 服务器储存目标电脑IP. 使用者的电脑利用脚本自动从服务器获取目标电脑的IP进行连接.
IP发送ping IP.server.的.IP -c 1 # 检测网络连接
if [ $? -eq 0 ]; then
ifconfig 网卡名 | sed 's/\t\| /;/g' > mypcip1.txt
scp -i /公钥/路径 ./mypcip1.txt ip@IP.server.的.IP:~/.ip/
/bin/rm ./mypcip1.txt
fi
服务器IP数据处理/usr/local/bin/getip:
echo -n "My PC1 IP is "
echo -n `ca