Linux 驱动蓝牙

Linux 驱动蓝牙

搞了台新设备,设备带一个AX200网卡,又有Wi-Fi又有蓝牙,Wi-Fi直接免驱,蓝牙却无法驱动,经过研究搞定了这个事情,记录下。

安装驱动

  • 检查蓝牙服务
1
2
3
service bluetooth status
# 如果显示 masked 就输入下面的命令
systemctl unmask bluetooth.service
  1. 安装蓝牙控制套件
1
apt install bluez -y
  1. 获取蓝牙设备
1
2
bluetoothctl show
# 如果显示 No default controller available 则表示没有驱动起来
  1. 安装缺少的驱动
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
# 查看蓝牙情况
dmesg | grep blue
# 我这里显示
# bluetooth hci0: Direct firmware load for intel/ibt-20-1-3.sfi failed with error -2
# 表示缺少 ibt-20-1-3.sfi 驱动文件

# 进入驱动文件夹
cd /lib/firmware/intel
# 下载缺失的驱动,如果你缺少的是别的驱动,则替换掉文件名即可
wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/intel/ibt-20-1-3.sfi
# 下载完毕后重启设备
reboot now
# 再次查看蓝牙设备
bluetoothctl show
# 此时应该已经有内容了
# root@vm:~# bluetoothctl show
# Controller **:**:**:**:**:** (public)
# Name: vm
# Alias: vm
# Class: 0x00000104
# Powered: yes
# Discoverable: no
# Pairable: yes
# UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
# UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb)
# UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb)
# UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
# UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)
# Modalias: usb:v1D6Bp0246d0532
# Discovering: no

设备控制

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
# 进入蓝牙控制 如果进入了,应该是这样的 [bluetooth]# 
bluetoothctl

# 开启扫描 屏幕上会出现一堆设备的 MAC 地址
scan on
# Discovery started
# [CHG] Controller E0:D4:E8:94:07:86 Discovering: yes
# [NEW] Device 54:21:C3:BC:77:1A 54-21-C3-BC-77-19
# [NEW] Device E9:33:F9:B9:6B:AF MX Keys
# [NEW] Device 48:AB:38:E9:67:89 48-AB-38-E9-67-84
# [NEW] Device F4:5C:89:AB:57:61 F4-5C-89-AB-57-66

# 关闭扫描
scan off

# 连接指定设备,屏幕上会出现不少内容,主要看
# 出现 Connection successful 则连接成功
connect E9:33:F9:B9:6B:AF

# 在蓝牙控制中 如果链接了蓝牙设备,或者断开了蓝牙设备都会有提示

# 有设备链接
# [CHG] Device E9:33:F9:B9:6B:AF Connected: yes
# [CHG] Device E9:33:F9:B9:6B:AF ServicesResolved: yes

# 有设备断开
# [CHG] Device E9:33:F9:B9:6B:DE ServicesResolved: no
# [CHG] Device E9:33:F9:B9:6B:DE Connected: no

如何在 macOS 下创建 Windows 安装U盘

如何在 macOS 下创建 Windows 安装U盘

即使所有设备都是苹果的东西了,但是还是避免不了身边的人需要使用 Windows 电脑,或者重装 Windows 系统,这时就需要创建 Windows 安装盘了。

准备

  • U盘(存储空间需要大于等于 8G,且要求格式化U盘)
  • Windows 系统镜像(ISO格式)
  • wimlib-imagex 大文件分割
  • rsync 文件复制

安装必备工具

使用 brew 安装这两个工具,如果已经安装请跳过

1
brew cask install rsync wimlib

制作

  1. 找到自己的U盘,如 disk3

    1
    diskutil list
  2. 格式化自己的U盘,并起名为 WINDOWS10,请务必确认替换掉disk3为你的U盘

    1
    2
    3
    diskutil eraseDisk MS-DOS "WINDOWS10" MBR disk3
    # 如果你清楚什么是 MBR/GPT 你也可以选择 GPT
    diskutil eraseDisk MS-DOS "WINDOWS10" GPT disk3
  3. 装载系统盘,直接双击挂载,如果你觉得手动方式一点都不酷,你也可以使用命令挂载

    1
    hdiutil mount ~/Downloads/Win10_2004_Chinese(Simplified)_x64.iso
  4. 复制除了sources/install.wim文件到U盘

    1
    rsync -vha --exclude=sources/install.wim /Volumes/CCCOMA_X64FRE_ZH-CN_DV9/* /Volumes/WINDOWS10
  5. 分割复制sources/install.wim到U盘

    因为这个文件太大,fat32格式装不下,会报错:File too large,所以需要分割复制。

    1
    wimlib-imagex split /Volumes/CCCOMA_X64FRE_ZH-CN_DV9/sources/install.wim /Volumes/WINDOWS10/sources/install.swm 4000

至此全部完成,现在可以直接当做 Windows 的启动盘了。

使用 SoftEther 搭建 L2TP VPN

使用 SoftEther 搭建 L2TP VPN

在openwrt上搭建 L2TP VPN 都推荐用 openswan、libreswan 比较繁琐,softether在openwrt上不知道为什么总是丢失配置文件,所以要在Linux上配置,softether这个简单易用还容易管理,也能完成多地组网的复杂操作。

安装

编译安装

1
2
3
4
5
6
7
8
9
10
# 安装编译工具
apt install build-essential gcc make wget tzdata git libreadline-dev libncurses-dev libssl-dev zlib1g-dev
# 下载源码
git clone https://github.com/SoftEtherVPN/SoftEtherVPN_Stable.git
# 编译,我编译的时候丝般顺滑,一点报错都没有(Ubuntu 20.04)
cd SoftEtherVPN_Stable/
./configure
make
# 安装
make install

开机自启

创建文件:/lib/systemd/system/vpnserver.service

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/vpnserver start
ExecStop=/usr/bin/vpnserver stop

[Install]
WantedBy=multi-user.target
1
2
3
4
# 开启这个服务
systemctl enable vpnserver.service
# 启动服务
service vpnserver start

配置L2TP

配置

咕了,这东西配置起来很容易很容易,教程特别多,都是中文的,大致说一下有两种配置方式:

一种是通过命令行配置vpncmd,这里如果你的Linux服务器是中文的,那么这个vpncmd的命令帮助都是中文的,简直太简单,这个vpncmd值得好好玩一玩,GUI配置有些时候着实是不方便。

另一种是通过管理程序配置,也是中文的,配置工具下载 https://www.softether-download.com/cn.aspx?product=softether。

如果想要访问内网的东西,需要开启SecureNAT

参考配置教程:

  1. 中文:https://noter.tw/4524/softether-vpn-架設記錄/
  2. 官方英文(不推荐):https://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server/1.Setup_L2TP%2F%2F%2F%2FIPsec_VPN_Server_on_SoftEther_VPN_Server
  3. 中文:https://libertyleadingnetwork.blogspot.com/2018/01/softethervpsvpn.html
  4. 中文:http://blog.dengxj.com/archives/9/

端口转发

如果你和我一样是在内网配置的,且有公网IP,需要在路由器上转发UDP:500UDP:4500出去,再搞一个DDNS这样就可以远程访问家里了。

Ubuntu 编译 vmfs-tool

Ubuntu 编译 vmfs-tool

VMFS 文件系统想要在 linux 里读取,需要使用vmfs-fuse,但是这个工具已经下架了,所以需要自己编译,

其实编译整理来说就是缺什么下什么,然后就编译完了。

我的系统:ubuntu 20.04

vmfs-tools 下载地址

如果只做读取使用这个就可以了

下载下来后,直接安装即可

1
opkg -i vmfs-tools_0.2.5-1_amd64.deb

挂载 VMFS 文件系统

其实挂载VMFS 文件系统很简单,类似 mount 命令

1
2
3
4
5
# 查看哪个是 VMFS
fdisk -l
# 挂载 /dev/sdb3
mkdir /tmp/vmfs
vmfs-fuse /dev/sdb3 /tmp/vmfs

或者你也可以手动编译

安装需要的库

1
apt install git build-essential gcc pkg-config xsltproc libfuse-dev uuid-dev

下载源码编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 下载源码
cd /tmp
git clone https://github.com/glandium/vmfs-tools.git
cd vmfs-tools
# 开始编译
./configure
make
gcc -Wall -O2 -g -D_FILE_OFFSET_BITS=64 -Ivmfs-fuse -Ilibvmfs -I/usr/include/uuid -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -c -o vmfs-fuse/vmfs-fuse.o vmfs-fuse/vmfs-fuse.c
gcc -o vmfs-fuse/vmfs-fuse vmfs-fuse/vmfs-fuse.o libvmfs/libvmfs.a -luuid -lfuse -pthread
# 安装
make install
install -s -m 0755 debugvmfs/debugvmfs /usr/local/sbin/
install -s -m 0755 vmfs-lvm/vmfs-lvm /usr/local/sbin/
install -s -m 0755 vmfs-fuse/vmfs-fuse /usr/local/sbin/
install -s -m 0755 fsck.vmfs/fsck.vmfs /usr/local/sbin/

ESXI SSH 免密码登陆

ESXI SSH 免密码登陆

ESXI 的 authorized_keys/etc/ssh/keys-root/authorized_keys 所以 ssh-copy-id 不会成功。

查看自己的公钥

1
cat ~/.ssh/id_rsa.pub

把自己的公钥写入到

1
echo "你的公钥" > /etc/ssh/keys-root/authorized_keys

完毕

Mac 修改 hostname

Mac 修改 hostname

黑苹果,前一阵子升级了系统,顺利升级,唯独发现主机名变成了iMacPro,这就有些难受了,导致 airdrop 时出现了 两个机器,所以一定要修改回来,修改命令如下。

  1. 执行命令

    1
    2
    3
    4
    5
    sudo scutil --set LocalHostName RyzenMacPro
    sudo scutil --set HostName RyzenMacPro
    sudo scutil --set ComputerName RyzenMacPro
    sudo hostname RyzenMacPro
    dscacheutil -flushcache
  2. 重启路由器,不然 netbios 名称修改不过来

  3. 重启电脑,最好在重启路由器的操作执行过后就直接重启电脑

GitHub action 自动部署 Hexo

GitHub action 自动部署 Hexo

首先贴上我的 yaml 代码,这可能是目前最简洁的了,因为加上了缓存,所以执行起来也较快,使用的是 https://github.com/yrpang/github-actions-hexo。

执行耗时

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
name: Deploy blog
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Cache node modules # 缓存 node_modules
uses: actions/cache@v1
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}
- uses: yrpang/github-actions-hexo@master
env:
TZ: Asia/Shanghai # 设置时区
with:
deploykey: ${{secrets.DEPLOY_KEY}} # 这里注意对应自己配置的KEY的名称
username: github-action
email: action@github

使用 GitHub action 还是老生常谈的那一套secret keydeploy key就不多说了,参考:

与其它不太一样的是:

  1. 源码的package.json文件中必须包含hexo-deployer-git

  2. 源码的_config.yml文件中必须包含deploy块,且 repo 必须为 ssh 形式,如:

    1
    2
    3
    4
    5
    6
    7
    # ...
    # 部署
    ## Docs: https://hexo.io/docs/deployment.html
    deploy:
    type: git
    # 这里填写博客 repo 地址,非源码地址
    repo: git@github.com:YOU_USERNAME/blog.git

如果上面的条件确定满足了,直接复制上面的 action 代码使用即可。

本篇文章由 GitHub action 自动生成。

我的图床相关内容

我的图床相关内容

终于没忍住诱惑,还是用上了图床,特地来测试一下。

image-20200531000941619

环境

软件:uPic + Typora 配合

图床:Github + 自定义域名

安装

安装 uPic Typora

1
brew cask install upic typora

配置图床

官方教程

Github 图床提醒

在 github 图床的设置中,自定义域名设置与 github 的 pages 不同,需要加上 https://http://,如 img.baidu.com,要写成 https://img.baidu.com ,否则明明返回了图片地址 typora 依然会认为上传失败。

看来 typora 的正则比较严格 😔

PVE 增加 pve/root 容量

pve

PVE 增加 pve/root 容量

PVE 在安装时默认不会使用全部硬盘容量用作 pve/root ,为的是存储其它内容,诸如dump,但是我有其它的硬盘存储备份,所以需要把 pve/root 扩容。

1
2
3
4
5
6
7
8
9
10
11
# 增加全部剩余空间
lvresize -l +100%FREE /dev/pve/root
# 你也可以增加指定容量
# lvresize -l +10G /dev/pve/root

# 增加后确定扩容
resize2fs /dev/mapper/pve-root

# 查看是否扩容成功

lvdisplay
pve

PVE 硬盘相关

PVE 硬盘相关

休眠

PVE 硬盘不休眠的原因基本都是由于pvestatd一直在读取硬盘信息,导致不会休眠

所以问题就比较简单了

第一种方法 (比较粗暴,不推荐)

1
pvestatd stop

第二种方法

修改/etc/lvm/lvm.conf文件,开启 lvm 的 metadata 的缓存

1
2
3
4
# 开启
sed -i 's/use_lvmetad = 0/use_lvmetad = 1/g' /etc/lvm/lvm.conf
# 重启
pvestatd restart

如果开启的话,就会缓存 lvm 的信息,就不需要再读取硬盘获取了

第三种方法

修改/etc/lvm/lvm.conf文件,过滤不需要监控的盘

1
2
3
4
# 添加 "r|/dev/sd*|" 到 global_filter
global_filter = [ "r|/dev/zd.*|", "r|/dev/mapper/pve-.*|", "r|/dev/sd*|" ]
# 重启
pvestatd restart

通过以上方式允许硬盘休眠后,可以让硬盘立即休眠来测试下是否还会被唤醒

1
2
3
4
# 立即休眠
hdparm -y /dev/sdc
# 设置硬盘休眠时间为 5 分钟
hdparm -S 60 /dev/sdc

这里-S取值设定逻辑比较奇怪,本文列出部分常见取值供选:

30 = 2 min 30 sec

60 = 5 minutes

120 = 10 minutes

180 = 15 minutes

241 = 30 minutes

242 = 1 hour

243 = 1.5 hours

244 = 2 hours

持久化保存 休眠时间

不要添加到各种开机启动的脚本、crontab 中

编辑/etc/hdparm.conf就可以做到持久化保存休眠配置

第一种

在 command_line 处

1
2
3
command_line {
hdparm -S 60 /dev/disk/by-uuid/f6c52265-d89f-43a4-b03b-302c3dadb215
}

第二种

在 特定硬盘处

1
2
3
4
# 这里也可以改为 sdc 或者 /dev/disk/by-label/8TB,但是 UUID 最稳定
/dev/disk/by-uuid/91e32677-0656-45b8-bcf5-14acce39d9c2 {
spindown_time = 60
}

挂载硬盘 给 lxc

首先需要注意的是,创建 LXC 容器需要在创建时开启了特权模式,否则只能读取但无法写入数据。

假设 lxc id 是 202

使用 sd* 挂载设备 (不推荐)

1
2
3
4
5
6
# 停止
pct stop 202
# 挂载 sdc 到 /data
pct set 202 -mp0 /dev/sdc,mp=/data
# 开机
pct start 202

使用 UUID 挂载设备(推荐)

因为 /dev/sdb /dev/sdc 这种形式可能会随着插拔设备之类的发生变动,或改变顺序,而 UUID 则不会改变

1
2
3
4
5
6
7
8
# 停止
pct stop 202
# 获取设备 UUID
blkid /dev/sdc
# 挂载 sdc 到 /data
pct set 202 -mp0 /dev/disk/by-uuid/312e15c4-c8e8-4465-8099-2f1cf007fe92,mp=/data
# 开机
pct start 202

PVE 移动虚拟磁盘到另一台虚拟机

PVE

PVE 移动虚拟磁盘到另一台虚拟机

准备工作,原主机和目标主机都要关机,然后把原主机的硬盘卸载

  1. 磁盘改名

    1
    2
    lvrename /dev/pve/vm-103-disk-1 /dev/pve/vm-200-disk-1
    # Renamed "vm-103-disk-1" to "vm-200-disk-1" in volume group "pve"
  2. 查看配置结构

    不知道怎么挂载的就手动添加一个硬盘查看下配置结构

    这里我添加了一个挂载点 /test ,大小 8G

    1
    cat /etc/pve/nodes/pve-asus/lxc/200.conf
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    arch: amd64
    cores: 2
    hostname: localService1804
    memory: 2048
    mp0: local-lvm:vm-200-disk-1,mp=/test,size=8G
    net0: name=eth0,bridge=vmbr0,firewall=1,gw=10.0.0.1,hwaddr=DA:7D:AB:9D:AB:97,ip=10.0.0.250/24,type=veth
    ostype: ubuntu
    rootfs: local-lvm:vm-200-disk-0,size=8G
    swap: 2048
    unprivileged: 1

    我这个目的地是 lxc 的,所以路径不一样,如果是 kvm 就去 /etc/pve/nodes/pve-asus/qemu-server/200.conf

  3. 编辑配置文件

    添加 要挂载的磁盘 上去

    1
    echo "local-lvm:vm-200-disk-1,mp=/data,size=32G" >> /etc/pve/nodes/pve-asus/lxc/200.conf

    此时在 web 界面上,硬盘应该已经出现在目标主机了

  4. 开机验货

    完成

参考资料

  1. https://pve.proxmox.com/wiki/Moving_disk_image_from_one_KVM_machine_to_another