解决ArchLinux在MacBook Pro 11,5下的休眠问题

# 唤醒后wlan没了

创建/etc/systemd/system/brcmfmac.service

[Unit]
Description=Reload brcmfmac after resume from hibernate
After=hibernate.target
After=suspend.target

[Service]
ExecStartPre=/bin/modprobe -r brcmfmac
ExecStart=/bin/modprobe brcmfmac

[Install]
WantedBy=hibernate.target
WantedBy=suspend.target

# 坑

休眠后唤醒再休眠就不正常了

 

参考

www.reddit.com

VFIO直通显卡折腾记录

20210309更新

 

整了一块RX 6800,但linux mint 20.1(ubuntu 20.04)下面怎么也挖不了矿,就想到了KVM虚拟机+显卡直通的方案,将显卡分配给虚拟机里的win10来挖矿。

主要硬件配置:

CPU:R9 3950X

主板:MSI B550M MORTAR WIFI

显卡:RX 6800(虚拟机) + RX 5700XT(主机)

硬盘:SM961(NVMe,虚拟机)(虚拟机系统装进NVMe后不久直接炸了,改用主机上的从vmdk转来的qcow2虚拟硬盘)+ SA530(SATA,主机)

主要参考资料:

mathiashueber.com

mechanical-consciousness.com

首先查询资料得知这个主板支持IOMMU,BIOS设置里将其Enabled。

接下来配置内核参数,编辑/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on iommu=pt"

然后update-grub,重启后输入dmesg | grep AMD-Vi,确认开启了IOMMU。

接下来是查找待分配的硬件ID。使用这个脚本:

#!/bin/bash
# change the 999 if needed
shopt -s nullglob
for d in /sys/kernel/iommu_groups/{0..999}/devices/*; do
    n=${d#*/iommu_groups/*}; n=${n%%/*}
    printf 'IOMMU Group %s ' "$n"
    lspci -nns "${d##*/}"
done;

输出一大堆东西。我将其保存至一个文件以便查找。以下是文件节选:

IOMMU Group 14 01:00.0 Non-Volatile memory controller [0108]: Samsung Electronics Co Ltd NVMe SSD Controller SM961/PM961 [144d:a804]

IOMMU Group 18 2d:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:73bf] (rev c3)

IOMMU Group 19 2d:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:ab28]

IOMMU Group 20 2d:00.2 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:73a6]

IOMMU Group 21 2d:00.3 Serial bus controller [0c80]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:73a4]

加粗部分就是要分配给虚拟机的硬件ID。将其加入内核启动参数:

GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on iommu=pt kvm.ignore_msrs=1 vfio-pci.ids=144d:a804,1002:73bf,1002:ab28,1002:73a6,1002:73a4"

这里的kvm.ignore_msrs=1,第一个参考资料说是win10 1803以上才需要的参数。

(小插曲,之前修改内核启动参数后,重启卡住,进不了图形界面,所幸还能ssh;更新了一下bios,结果好了!甚至IOMMU分组都变多了)

 

接下来是创建虚拟机。使用红帽公司virt-manager在图形界面下创建,很方便。

f:id:pikakolendo:20210305101635p:plain

f:id:pikakolendo:20210305101709p:plain

这一步选择windows 10也行。

f:id:pikakolendo:20210305101937p:plain

f:id:pikakolendo:20210305101955p:plain

内存和CPU随意分配。由于我是直接给虚拟机分配物理硬盘,“为虚拟机启用存储”跳过。

f:id:pikakolendo:20210305102506p:plain

概述:

f:id:pikakolendo:20210305102655p:plain

CPU:

f:id:pikakolendo:20210305102735p:plain

添加硬件:

f:id:pikakolendo:20210305102852p:plain

在这里按照之前脚本输出的硬件ID,把要分配的PCI设备分配给虚拟机。然后取消勾选“ROM栏”。只有NVMe直通需要取消勾选“ROM栏”(实际上是ROM BAR的拙劣翻译)。

f:id:pikakolendo:20210305103101p:plain

然后点回“概况”,手动编辑xml,在<features>里面加入:

<hyperv>
<vendor_id state="on" value="101"/>
</hyperv>
<kvm>
<hidden state="on"/>
</kvm>

否则不能从显卡连接的显示器输出(参考链接)。如果仅仅当一个挖矿工具系统使用的话,没必要设置这玩意,否则SPICE会出问题,鼠标指针会消失。

装完系统和驱动后就能愉快挖矿啦!

但是有一个恼火的问题(AMD Reset Bug),虚拟机关机后再开机,显卡无法使用!必须重启主机!好消息!6800系并没有reset bug!之前出问题是因为少分配了两个东西,参见这个视频把那两个跟显卡关联的东西分配上去就好了。

 

解决linux mint 20.1下thinkpad小红点飘的问题

在mint下总感觉小红点(正式名称:TrackPoint)难用,力量小很慢,稍微用点力就起飞,非常难用。

经过一番折腾发现是libinput的问题。以下是解决方案。

将libinput换成evdev

终端运行xinput命令,列出当前输入设备,其中注意这一行

TPPS/2 ALPS TrackPoint id=18 [slave pointer (2)]

得到小红点的设备名称"TPPS/2 ALPS TrackPoint"和id=18。运行

xinput --list-props 18

 输出这些东西

Device 'TPPS/2 ALPS TrackPoint':
Device Enabled (164): 1
Coordinate Transformation Matrix (166): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Natural Scrolling Enabled (299): 0
libinput Natural Scrolling Enabled Default (300): 0
libinput Scroll Methods Available (301): 0, 0, 1

……

可以看到当前系统默认使用libinput来控制小红点。那么就干掉它!

安装xserver-xorg-input-evdev和xserver-xorg-input-synaptics(给触摸板用)包,然后再purge掉xserver-xorg-input-libinput,重启。此时上面那条命令的输出变成这样

Device 'TPPS/2 ALPS TrackPoint':
Device Enabled (164): 1
Coordinate Transformation Matrix (166): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (296): 0
Device Accel Constant Deceleration (297): 1.000000
Device Accel Adaptive Deceleration (298): 1.000000
Device Accel Velocity Scaling (299): 10.000000
Device Product ID (284): 2, 10
Device Node (285): "/dev/input/event11"
Evdev Axis Inversion (300): 0, 0
Evdev Axes Swap (302): 0

……

成功使用evdev驱动起了小红点,手感也不像之前那么飘了。

模拟滚轮

libinput默认能够在点击中键时上下移动小红点实现滚动,换成evdev后还需要进行配置。

将这些写入/etc/xprofile或~/.xprofile中:

xinput set-prop "TPPS/2 ALPS TrackPoint" "Evdev Wheel Emulation" 1
xinput set-prop "TPPS/2 ALPS TrackPoint" "Evdev Wheel Emulation Button" 2
xinput set-prop "TPPS/2 ALPS TrackPoint" "Evdev Wheel Emulation Axes" 6 7 4 5

 重新登录搞定。6 7是允许横向滚动,不需要横向滚动的话设成0 0 4 5。

 

参考资料

wiki.archlinux.org

askubuntu.com

linux mint 20.1下使用指纹

买了台ThinkPad T14,带有指纹传感器。试试它在linux下表现如何。

安装一些包:

sudo apt install fprintd libpam-fprintd libpam-fprintd

 然后录入指纹,以右手食指为例:

fprintd-enroll -f right-index-finger

然后运行

sudo pam-auth-update

选中Fingerprint authentication:

f:id:pikakolendo:20210208170521p:plain

 确定,重启后就能用指纹登录和sudo认证啦

 参考:

forums.linuxmint.com