智能时钟

智能时钟是什么?

  • 基本功能:时钟、闹钟,并能进行自定义,比如老年人大字体,自定义闹铃等。

  • 额外功能:下载、文件共享……

为什么需要智能时钟?

  • 手机是私人物品,而且小孩子不一定有,家庭还是需要一个时钟的。

  • 看时间这事,时钟比手机更有仪式感。比如稣就很怀念小时候的机械时钟,几点就响几下,曾经觉得特别神奇。

  • PC 上的迅雷越来越大坨了,而且稣特别怀疑它老在扫描硬盘里价值千万的代码,所以想让它在一个独立的设备运行,那可不就是运行在智能时钟里最合适吗?

  • 少量文件共享,特别是看完就删的电影,如果买 NAS,那多贵呀,多费电呀……NAS 显然不适合穷稣,稣只愿意为文件共享付出一张 32G 的 MicroSD 卡。

  • 全家可以参与制作,是一个家庭娱乐项目。

  • 时钟拥有智能后,您还可以想出更多好玩的!

怎么做一个智能时钟?

稣正好有一个屏幕失灵的八英寸的平板电脑,酷比魔方 iWork 8,拿它来做智能时钟刚好合适。

SmartClock

当然,如果能定制一个,那更好:

  • 摄像头都拿掉:后摄像头是贴墙的,肯定没用了,前摄像头也许能想到用途,但稣暂时用不上,所以也把它挡起来。

  • HDMI 接口可以拿掉:已经不需要外接显示器。

  • 需要屏,但没必要是触摸屏:事实上稣的 iWork 8 就是触摸坏掉,作为时钟并没有啥不便。

  • 耳机接口没必要:它只会增大厚度,即使是当作平板电脑用的时候,就从来没插过!

去掉这些东西后,这一台全新的平板智能时钟,大约就卖 99 块,吧?反正再贵点,稣就不买。

稣在 B 站扔了两个劣质视频,笑纳吧(不好笑的话,可以上去吐槽):

甚至还有开源项目:

具体制作过程

1. 安装智能时钟操作系统——Debian

为什么?除了因为稣喜欢它,更重要的原因是:原装的 Windows 太大了,没啥剩余空间,而且定制「锁屏界面」真的难!Debian 小很多,也容易定制。其它 Linux 发行版不够爱国,被稣无视了。

注意:选择【不安装】桌面环境!

参考:在华硕灵耀 X 纵横上装 Debian 桌面的经验

这步会遇到坑——这些 2G 内存的老平板很可能只支持 32bit 的 EFI 启动!

2. 安装驱动

iWork 8:

1
sudo apt install firmware-realtek firmware-intel-sound

Dell Venue 8 Pro 稍微麻烦点:

1
2
3
4
apt install firmware-atheros

git clone https://github.com/UMU618/ath6kl-firmware
sudo cp -r ath6kl-firmware/ath6k/AR6004/hw3.0/ /lib/firmware/ath6k/AR6004/

3. 配置无线网络

建议采用 NetworkManager 的方式:

1
sudo apt install network-manager

参考:https://wiki.debian.org/WiFi/HowToUse#NetworkManager

话说这里有个矛盾——要是一开始没网络,怎么 apt?当然是先插个 USB 有线网卡了……如果没有的话,需要离线把无线网卡驱动准备好,U 盘和 dpkg 大法。

4. 安装 SDDM 和 i3

1
2
3
sudo apt install xserver-xorg-video-intel
sudo apt install xserver-xorg-input-evdev xserver-xorg-input-kbd xserver-xorg-input-mouse
sudo apt install sddm i3 sakura fonts-wqy-zenhei

为什么是反人类的 i3

  • 因为它很小,能够获得更多剩余空间!

  • 只跑个迅雷您还要什么大型桌面?

  • Samba 服务也不要什么桌面呀!

  • i3 是反人类,但稣很喜欢 i3 呢……

5. 安装智能时钟主题

参见开源项目:

https://github.com/UMU618/sddm-theme-clock

https://gitee.com/umu618/sddm-theme-clock

没错,这两个链接在本文出现了两次!

6. 安装远程桌面服务

时钟挂在墙上,主要的使用方式当然是 SSH 或远程桌面(RDP)过去。使用迅雷这样有界面的程序,最好就是通过远程桌面。

1
sudo apt install xrdp

7. 安装迅雷

1
2
3
wget http://archive.kylinos.cn/kylin/partner/pool/com.xunlei.download_1.0.0.1_amd64.deb
sudo dpkg -i com.xunlei.download_1.0.0.1_amd64.deb
sudo apt install libgtk2.0-0 libnss3 libdbus-glib-1-2

迅雷的启动命令是:/opt/apps/com.xunlei.download/files/start.sh

8. 安装做共享用的 Samba

1
sudo apt install samba

来个配置例子:

1
2
3
4
5
6
7
# cat /etc/samba/smb.conf
[movie]
comment = Movie
browseable = yes
path = /mnt/sd/movie
read only = yes
guest ok = yes

9. 全家出动录音做闹钟声

直接在平板电脑上用 arecord 录有点麻烦,建议在 PC 上录再用 scprz 上传,wav 格式的就行。

调节音量可以用:

1
2
sudo apt install alsa-utils
alsamixer

然后在 crontab 脚本里用 aplay 播放。

参考稣家里的:

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
root@uclock:/opt/clock# ll
总用量 3228
-rw-r--r-- 1 root root 179300 May 12 22:37 0730.wav
-rw-r--r-- 1 root root 271548 May 5 21:57 0750.wav
-rw-r--r-- 1 root root 452796 May 5 22:03 1345.wav
-rw-r--r-- 1 root root 432312 May 5 21:46 2200.wav
-rwxr-xr-x 1 root root 168 May 6 22:23 alarm.sh
-rwxr-xr-x 1 root root 184 May 6 22:28 chime.sh
-rw-r--r-- 1 root root 208088 May 5 02:57 chime.wav
-rw-r--r-- 1 root root 171206 May 5 22:09 near_0750.wav
-rw-r--r-- 1 root root 429254 May 6 00:21 near_1345.wav
-rw-r--r-- 1 root root 500934 May 6 00:24 near_1345+.wav
-rw-r--r-- 1 root root 624838 May 5 22:12 near_2200.wav
-rwxr-xr-x 1 root root 199 May 6 00:29 near_alarm.sh
-rwxr-xr-x 1 root root 53 May 5 23:21 screen_off.sh
-rwxr-xr-x 1 root root 186 May 6 03:13 screen_on.sh

root@uclock:/opt/clock# crontab -l
0 * * * * /opt/clock/chime.sh
0 2 * * * /opt/clock/screen_off.sh
0 7 * * * /opt/clock/screen_on.sh
30 7 * * 1-5 /opt/clock/alarm.sh
47 7 * * 1-5 /opt/clock/near_alarm.sh 0750
50 7 * * 1-5 /opt/clock/alarm.sh
42 13 * * 1-5 /opt/clock/near_alarm.sh 1345+
43 13 * * 1-5 /opt/clock/near_alarm.sh 1345
45 13 * * 1-5 /opt/clock/alarm.sh
45 13 * * 1-5 /opt/clock/alarm.sh
57 21 * * * /opt/clock/near_alarm.sh 2200

alarm.sh 脚本:

1
2
3
4
5
6
7
8
9
#!/bin/sh

CD="$(cd $(dirname $0) && pwd)"
FILE="${CD}/$(date +%H%M).wav"
if [ -f $FILE ]; then
/usr/bin/aplay -D plughw:1,0 ${FILE}
else
echo "$FILE not found!"
fi

chime.sh 脚本:

1
2
3
4
5
6
7
8
9
#!/bin/sh

CD="$(cd $(dirname $0) && pwd)"
/usr/bin/aplay -D plughw:1,0 ${CD}/chime.wav

FILE="${CD}/$(date +%H%M).wav"
if [ -f $FILE ]; then
/usr/bin/aplay -D plughw:1,0 ${FILE}
fi

near_alarm.sh 脚本:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh

if [ ${#1} -ge 4 ]; then
CD="$(cd $(dirname $0) && pwd)"
FILE="${CD}/near_${1}.wav"
if [ -f $FILE ]; then
/usr/bin/aplay -D plughw:1,0 ${FILE}
fi
else
echo "Invalid parameter!"
fi

10. 高级功能

  • 旋转屏幕:xrandr

  • 防止休眠、定时息屏和亮屏:dpms

  • 调屏幕亮度:ls /sys/class/backlight

  • 模拟时钟:xclock

这就得好好学习 Linux 了……前面只是抛砖引玉,还有许多好玩的哦!

后话

折腾旧设备总有意外的收获!比如,Surface RT 在 Windows 下无法识别 5.8GHz WiFi5,在 Raspbian 下却可以。祝大家玩得愉快!

管理 macOS 的登录项

问题

稣在 macOS 上装了「Free Download Manager」,结果每次系统重启登录后它都会自启动,稣明明没让它这么做的!以下图形界面下的方法都试过,还是自启动!

  • 在「Dock 栏」右击「Free Download Manager」的图标,选择「选项」,确认「登录时打开」没有打勾。

  • 「系统偏好设置」-「用户与群组」-「登录项」里面也没有「Free Download Manager」。

学习

  1. 从苹果官方文档开始,第一篇相关文档:Designing Daemons and Services 说有图形界面的自启动机制叫做 Login item。

  2. 于是转到 Adding Login Items,这篇文章说明添加「登录项」有两种方式,具体方法已经是给开发者用的了,对于咱们反向操作(删掉它)帮助不大。

  3. 但是通过搜索 SMLoginItemSetEnabled 可以知道相关路径为 XX/Library/LaunchAgents

操作

  1. 首先要得到「Free Download Manager」的程序 ID:
1
2
3
4
5
6
7
8
9
$ ls /Applications | grep 'Free Download Manager'
Free Download Manager.app

$ ls /Applications/Free\ Download\ Manager.app/Contents
Frameworks Info.plist MacOS PkgInfo PlugIns Resources _CodeSignature translations

$ grep -A1 CFBundleIdentifier /Applications/Free\ Download\ Manager.app/Contents/Info.plist
<key>CFBundleIdentifier</key>
<string>org.freedownloadmanager.fdm6</string>

以上,专业的一条命令为:

1
2
$ defaults read /Applications/Free\ Download\ Manager.app/Contents/Info.plist CFBundleIdentifier
org.freedownloadmanager.fdm6
  1. 查找 org.freedownloadmanager.fdm6 有没有在 XX/Library/LaunchAgents
1
2
$ find ~/Library/LaunchAgents /Library/LaunchAgents /System/Library/LaunchAgents -name org.freedownloadmanager.fdm6\*
/Users/YourUserName/Library/LaunchAgents/org.freedownloadmanager.fdm6.plist
  1. org.freedownloadmanager.fdm6.plist 禁止自启动
1
2
3
4
5
6
7
$ defaults read ~/Library/LaunchAgents/org.freedownloadmanager.fdm6.plist RunAtLoad
1

$ defaults write ~/Library/LaunchAgents/org.freedownloadmanager.fdm6.plist RunAtLoad 0

$ defaults read ~/Library/LaunchAgents/org.freedownloadmanager.fdm6.plist RunAtLoad
0

搞定。

Linux 桌面玩稣

问题

  • 那么多 Linux 发行版,哪个桌面最好用?

  • i3wm 到底是不是反人类?

  • FreeOffice 究竟是不是免费?

  • 以极客理念做的产品,究竟是不是坑人的?

  • 国产 OS 到底有没有戏?

体验

系列 包管理器 防火墙 经验 主观感到的坑
OpenWRT opkg 很容易理解的文件配置:vi /etc/config/firewall 或者 uci,然后 /etc/init.d/firewall reload 从 2010 年初开始一直在用,能刷它的路由器没有一台能逃过。轻量是它的特点。 ash 不够智能,当然如果硬件允许,可以装 zsh;不适合做桌面,但其实也可以哦(肯定是坑)!
Ubuntu/Debian、Armbian apt 好用的:ufw 大学就见好多学长用 Ubuntu,默认情况下,它的桌面比 Debian 漂亮,Debian 比较适合当服务器,实际上稣一般使用 Debian。物理机装了好多台,一些电视盒子也刷成 Armbian 在做测试机。 目前 Bullseye 用的内核是 5.10,比较保守。默认桌面都很丑。
CentOS(后续 RockyLinux、AlmaLinux) yum 有点忘记了,是不是有个 firewall-cmd 很久以前被迫用过…… 就是没好感,反正也挂了(才怪)。
Manjaro/ArchLinux pacmanyay 好用的:ufw Manjaro 桌面体验很好,ArchLinux 只在虚拟机里体验。内核 5.15 是比 Debian 新。 i3 版装完中文支持有问题,KDE 则没问题。
PostMarketOS/AlpineLinux apk(真的不是安卓啊~) 不知道怎么喷的:awall 也是内核 5.15,和 OpenWRT 的理念很像,而且注重轻量和安全。AlpineLinux 适合做容器的基础镜像。 对中文真不友好。进入系统后还是把 ash 换成 zsh 吧。还有这个 awall……和 ufw 比,真的很想说 ashit!

列这个表其实想说几个感受:

  1. 体验这么多不同发行版真浪费生命。尤其想说:包管理器有必要这么多吗?对软件开发商来说,真的很无语呀!

  2. 在用 Manjaro 时发现,网易云音乐这个软件,其实是来自 Debian 系的 deb 包,国产的 OS 大部分也都是基于 Debian 的。也就是说:如果有流行的软件,会有人重新打包成其它包。怎么说呢……国产 OS 如果开发了啥国民软件,是不是 Manjaro 也会吸收过去?那国产 OS 岂不是又没啥优势了?

  3. 如果习惯 Windows 或者 macOS,最好还是选择 KDE Plasma,然后装合适的主题,让它更像 Windows 或者 macOS。i3wm 这种极客型的产品,不适合大部分人。而且 Manjaro i3 是个社区版,不是官方版,中文支持是有问题的。

  4. 有小伙伴问稣:怎么会用 PostMarketOS 这种乱七八糟的东西?稣内牛满面,还不是因为很早以前买了台 Surface RT……自从微软抛弃它之后,稣挣扎过一次,装了 Windows 10 ARM,可现在不是已经 11 了吗?于是一不做二不休装 Linux,然后就装了这个奇怪的 PostMarketOS。当然后悔了,它能刷 Ubuntu Server 的,真是脸疼……

  5. Wayland 吗?不了,谢谢,稣用 X11 就行。

  6. 最后一个问题:稣叛变到 Arch 系了吗?没有!选 Linux,稣还是用 Debian,毕竟要支持国产嘛(间接)!

诗盗·僵军

《#诗盗#·僵军》:资本竞灭民工丧,回首无钱治愁肠。苍茫挨踢问谁主,无产伏首卷中皇。

注解

改编自霹雳角色“驭能天”的诗号。

狼辰竞灭忌孤丧,回首无人斩空霜。
苍茫天地问谁主,日月伏首刀中皇。

创作故事

两个人一起在非洲穷游,突然在草原上遇到狮子。

甲立刻弯腰整理鞋子。

乙嘲笑道:还整什么鞋子!哪有人跑得过狮子?

甲微笑地答:我只需要跑赢你。

乙也哈哈狞笑:你有木有听过,天下大势浩浩荡荡,顺之者昌,逆之者亡?

甲不解:请说人话!

乙绝望地说:草,里,那是一群…狮子!

在华硕灵耀 X 纵横上装 Debian 桌面的经验

需求

今天发现华硕灵耀 X 纵横已经降价到 6999 元。所以,应该给它装上 Debian 了。

准备

解决

  1. 需要准备一个 U 盘,用 Rufus 做一个 UEFI 格式的启动盘。

  2. 如果有 USB 有线网卡,插上去,联网安装更省事,如果没有那就断网安装一个最小系统,然后去借一个 USB 有线或者无线网卡……

  3. 需要 non-free 驱动,先选择不安装,后面再装。

  4. 选择中国的镜像服务器,南方选中科大,北方选择阿里云或者清华大学。

  5. tasksel 阶段,不要安装桌面环境,先安装最小的系统。

  6. 安装完,重启。

  7. 登录系统,编辑 /etc/apt/sources.list,加 non-free 和配置 debian-security:

1
2
3
4
5
6
7
8
deb https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
#deb-src http://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free

deb https://mirrors.ustc.edu.cn/debian-security bullseye-security main contrib non-free
#deb-src https://mirrors.ustc.edu.cn/debian-security bullseye-security main contrib non-free

deb https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
#deb-src http://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free

这步很重要,如果不改 debian-security,那么接下来在国内网络环境下,可能会很慢……

  1. 安装 non-free 驱动,主要是无线网卡和声卡:
1
sudo apt install firmware-iwlwifi firmware-sof-signed

装完无线网卡驱动后,网卡名字是 wlo1,配置见 https://wiki.debian.org/WiFi/HowToUse

  1. tasksel 安装桌面,稣选择 KDE Plasma。

  2. 【可选】开远程桌面:

1
sudo apt install xrdp

Plasma UX3000E

设置 Debian 不自动进入桌面

需求

在 Debian 上装了 KDE Plasma 桌面,但使用率不高,毕竟主要是当服务器使用,所以不想每次启动都自动进入桌面,以节约内存。

解决

1
sudo systemctl set-default multi-user.target

重启后就是默认的控制台登录。如果想直接以当前控制台登录的身份进入桌面,运行 startx 即可。但这种方式桌面是跑在当前控制台上,不是第 7 个控制台(Ctrl+Alt+F7),如果想尽量保持和原来自动启动桌面的环境一样,应该用:

1
2
3
4
sudo systemctl isolate graphical.target

# 或者更直接地【不建议使用】
sudo systemctl start sddm.service

这将以服务身份进入桌面,后面还要再通过图形界面登录一次。

如想恢复自动进入图形界面:

1
sudo systemctl set-default graphical.target

如想知道当前处于哪种方式,可使用:

1
systemctl get-default

跟 UMU 一起玩 OpenWRT(高级篇3):在线升级内核

需求

想升级 OpenWRT 路由器的内核,又不想每次都把 SD 卡拿下来刷,怎么办?

前提

  • 本文将以 Nano Pi R4S 为例。

  • 这里的“在线”指的是:不重新刷 ROM,也不用 sysupgrade,纯手动替换文件,然后 reboot 生效。

解决

1. 先查看当前版本

1
2
uname -a
Linux UMUR4S 5.10.107 #0 SMP PREEMPT Sat Mar 19 19:05:00 2022 aarch64 GNU/Linux

目前是 5.10.107,想升级到 5.10.108!

2. 下载新 ROM 到路由器

可以直接在 OpenWRT 里用 wget 下载到 /tmp 下,或者在其它机器下载好,用 scp 上传到路由器的 /tmp 下。

下载地址:https://github.com/UMU618/openwrt-config/releases

3. 解压新 ROM、挂载分区

1
2
3
4
5
6
7
8
9
cd /tmp/

# wget

gunzip -d openwrt-rockchip-armv8-friendlyarm_nanopi-r4s-ext4-sysupgrade.img.gz

parted openwrt-rockchip-armv8-friendlyarm_nanopi-r4s-ext4-sysupgrade.img
unit B
p

可以看到 img 里的两个分区:

1
2
3
4
5
6
7
8
9
Model:  (file)
Disk /tmp/openwrt-rockchip-armv8-friendlyarm_nanopi-r4s-ext4-sysupgrade.img: 176160768B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 33554432B 50331647B 16777216B primary ext2 boot
2 67108864B 176160767B 109051904B primary ext2

把这两个分区别分挂载:

1
2
3
4
5
mkdir new_boot
mount -o loop,offset=33554432 openwrt-rockchip-armv8-friendlyarm_nanopi-r4s-ext4-sysupgrade.img new_boot

mkdir new_root
mount -o loop,offset=67108864 openwrt-rockchip-armv8-friendlyarm_nanopi-r4s-ext4-sysupgrade.img new_root

4. 挂载待更新的 boot 分区

1
2
mkdir boot
mount /dev/mmcblk1p1 boot

检查一下,时间是不一样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@UMUR4S:/tmp# ll boot/
drwxr-xr-x 3 root root 4096 Jan 1 1970 ./
drwxrwxrwt 23 root root 660 Mar 27 18:17 ../
-rw-r--r-- 1 root root 352 Mar 21 01:17 boot.scr
-rw-r--r-- 1 root root 14860296 Mar 21 01:17 kernel.img
drwx------ 2 root root 4096 Jan 1 1970 lost+found/
-rw-r--r-- 1 root root 55738 Mar 20 19:26 rockchip.dtb
root@UMUR4S:/tmp# ll new_boot/
drwxr-xr-x 3 root root 4096 Jan 1 1970 ./
drwxrwxrwt 23 root root 660 Mar 27 18:17 ../
-rw-r--r-- 1 root root 352 Mar 27 17:56 boot.scr
-rw-r--r-- 1 root root 14860296 Mar 27 17:56 kernel.img
drwx------ 2 root root 4096 Jan 1 1970 lost+found/
-rw-r--r-- 1 root root 55738 Mar 27 17:45 rockchip.dtb

开始复制文件:

1
2
cp new_boot/* boot/
cp -r new_root/lib/modules/5.10.108 /lib/modules/

检查一下,现在应该同时存在两个版本的 modules:

1
2
3
4
5
root@UMUR4S:/tmp# ll /lib/modules/
drwxr-xr-x 4 root root 4096 Mar 27 18:28 ./
drwxr-xr-x 10 root root 4096 Mar 21 05:24 ../
drwxr-xr-x 2 root root 4096 Mar 20 03:05 5.10.107/
drwxr-xr-x 2 root root 4096 Mar 27 18:28 5.10.108/

5. 重启验证

reboot 后查看版本,如果没问题就清理旧版本:

1
2
3
4
uname
Linux UMUR4S 5.10.108 #0 SMP PREEMPT Sun Mar 27 04:00:50 2022 aarch64 GNU/Linux

rm -rf /lib/modules/5.10.107

诗盗·疏漏聋锈

《#诗盗#·疏漏聋锈》:学堂初出欲躺平,技术更迭,规模不减反增。KPI,OKR,内卷岁月财源正盛,共印萧条疑似有染。

注解

改编自霹雳角色“疏楼龙宿”的诗号。

华阳初上鸿门红,疏楼更迭,龙麟不减风采;
紫金箫,白玉琴,宫灯夜明昙华正盛,共饮逍遥一世悠然。