分类 独立文稿 下的文章

视频点此:第一期第二期第三期

一、红酒?

红酒,英文wine。当然,电脑界的wine并不能喝,而是一套组件,这个组件可以使得windows程序运行在Linux和MacOS上。可以说,如果需要在Linux上运行windows程序,那一定会利用wine或者通过wine的一些组件来实现——无论游戏还是应用。

那么wine到底是什么东西呢?按照官方的说法,wine是一个兼容层而不是一个模拟器,也就是说,wine与虚拟机不同,而是直接让linux拥有执行windows指令的能力。有些观点认为wine这个东西是在最近一些年里边出现的,确切的说应该是wine在最近几年才真正的易用起来。它的金主——CodeWaver早在25年就开始了wine的研发进程。而wine的商业版——Crossover,则是CodeWaver的一个收入来源。与wine需要用户自己配置的区别在于,wine商业版可以以自动完成运行应用程序需要做的准备工作,从而构建起了在Linux和Mac中一键安装windows程序的能力。很好用,如果你需要wine,自己又不会配置,那么可以尝试购买一份crossover来使用。

二、版本?

当然,如果不想花钱,可以使用crossover的开源版本——wine,同样可以完成crossover相同的功能——当然,很多步骤需要手动操作才能完成。但是因为它开源,所以各种大神为了解决各种应用场景制作了各种版本的wine。接下来就简单介绍一下wine的这些版本。

1、正统

你可以从你的Linux仓库中直接获取到正统的版本。它包含三个后缀:wine-stablewine-stagingwine-devel。就像Chrome在for Linux的官方仓库中拥有的三个版本:stable、unstable、beta,wine的这三个版本稳定性是逐渐下降的,而新特性取得的时间是逐次上升的。一般来说,会推荐使用wine的stable版本。不过随着wine越来越多的可喜的变化,我逐渐的开始推荐使用staging版本了。因为它既不像devel这种开发版那么的不稳定和多变,又不像stable版本过于保守的增加新特性,staging保证了在尽量早的获得新特性的同时,又有着不错的稳定性。

2、不正统

不过,在正统版本之外,还有一些不错的第三方版本推荐一用。这里,你可以前往lutris的wiki来简单浏览一下。

它记录了两个主要的第三方版本:GE——Glorious Eggroll和tkg——TK-Glitch。而这两个第三方版本又有很多不同的衍生版,不同的衍生版针对不同的问题有着对应的修复,具体的修复你可以自己到这里来看一看。至于lutris,我曾经单独说过这个可以集合包括steam和gog在内的游戏库软件,这里就不再多说,只是来演示一下如何在lutris里使用不同版本的wine。

它对wine版本的管理很清晰,只需要点击Wine旁边的Manage Version,你就可以在这里选择各种版本的wine了。可以看到,除了通用的第三方版本,lutris还提供了针对游戏的版本,就比如lutris-lol,很明显,这个版本专门针对lol进行了优化,那用这个版本来运行lol显然是最好的选择。获取和设置也很简单,只需要勾选需要的版本,lutris就会自动安装部署,然后点击游戏的设置图标—启动器选项,就可以自由的选择已经安装的wine了。注意啊,这是可以多版本并存的。你要做的仅仅是勾选即可。

而对于Steam,它自己的Steam play项目和针对这个项目推出的第三方wine版本——proton我曾经也说过。所以这里同样只是介绍一下如何使用自定义的proton套件。

这个第三方套件同样有两个衍生,前边提到的GE和TKG。不同的是,这里的版本是基于steam的proton衍生得到,所以它更主要的目的在于解决使用Steam play官方版本游玩有问题的游戏。也因此,这个组件只能使用在Steam中。

先来看看tkg的自定义版,被称为proton-tkg

  1. 前往https://github.com/Frogging-Family/wine-tkg-git/releases获取最新版本
    因为tkg对于arch分支更加友好,所以对于arch分支的用户,只需要下载前两个;而Debian系的用户,就需要下载源码自行编译了。我是arch用户,所以我下载前两个,接下来也以arch演示
  2. 下载后,两者在同一个文件夹下,使用pacman -U zst结尾的那个文件名来安装
  3. 解压刚刚下载的zip后缀的文件,复制到~/.steam/root/compatibilitytools.d/

    如果没有这个文件夹,则新建一个。同时,复制过来的这些文件用一个文件夹包裹起来。所以最终这些文件所在的位置应该类似于~/.steam/root/compatibilitytools.d/proton-tkg/

    对于Debian分支系统,可能不需要root这一层目录

然后,你就可以在steam的steam play设置界面看到刚刚安装的自定义版本了。不过对于自定义版本,针对游戏进行设置可能是更好的选择。只需要在特定游戏的设置界面选择需要的版本保存即可。

第三方的改动是很有必要的。虽然我没遇到过——因为我的很多游戏都可以原生支持linux,不能支持的使用官方版本proton也能完美运行——不过个别游戏使用第三方会有更好的体验。比如warframe,只有使用tkg版本才能显示更新的进度条和下载信息。

再来看看GE的自定义版,被称为protonGE

  1. 前往https://github.com/GloriousEggroll/proton-ge-custom
  2. Release页面下载tag.gz文档并解压
  3. 将其中的文件夹复制到~/.steam/compatibilitytools.d/下,完成

不过,有实验表明,对于自定义的Proton,因为wine研发和新版本释放时候新功能的不稳定性,对于游戏的流畅度来说也并不是版本越新越好,因此有些游戏可能需要使用旧版本的自定义proton才能更好的游玩。但就像我前边提到的,我自己的这些游戏只需要用官方版本便可流畅运行,所以可能轮到你用的时候才会感觉麻烦的很吧。

聊过了这些全球流行的自定义版本,接下来看看国内定制版本:deepin-wine。

这是深度为了国内的应用特意魔改的一个wine版本,基于wine2.18版本开发——很老的wine版本了,我个人猜测,从2过渡到如今的5可能需要耗费很大的精力,所以现在deepin-wine的开发也几乎是一个停滞的状态了。不过对于国内的一众应用,使用deepin-wine来运行可能反而会比使用正版wine运行问题来的要少——所以也不知道南极大鸟家族在它们的产品里到底使用了什么拥有黑科技的库文件。

不过整体来说,deepin-wine的版本还是太老了一些,而且也不是所有发行版都可以安装这个版本的wine。所以这里也不再多说了,只是知道它的包名叫做deepin-wine就好了。如果想安装,就尝试找到这个包来安装就行了。

三、几个容易被忽略的小技巧

1、使用32位容器

虽然wine默认是64位的,但是使用32位容器会使得程序运行的更可靠。只需要在使用wine命令前增加变量WINEARCH=win32即可。

推荐将这个变量写入到.xprofile,这样每次执行wine命令时默认就是32位的了

2、指定容器位置

在wine命名前增加变量WINEPREFIX=路径即可指定容器创建的位置。默认是在~/.wine

通过这个变量可以实现一容器一软件,保证针对不同软件使用不同的wine环境配置。

3、初始化容器/调整容器设置

使用命令winecfg即可打开wine的容器设置。若当前位置没有容器则会自动初始化一个而不安装任何windows程序。

4、补充wine的组件

安装使用winetricks可以方便的增删容器内的支持组件(.NET等)。

5、中文模糊/乱码

字体问题可通过注册表设置字体替换解决。具体可参考wine字体 - Archwiki解决中文乱码 - Archwiki

视频点此

这两天北京又有点儿吃紧,核心地区的学校又停课了。那必然,如果说上课或者考试的话,肯定会有摄像头来监控你的行为——远程办公也是类似的吧?那有没有办法能让你逃过摄像头的监视呢?虚拟一下就可以了。这可能也是最通用的虚拟方法,任何软件都能使用。

一、原理

如何实现呢?回想一下我曾经说过的用手机做电脑摄像头:在使用时需要先通过命令加载一个v4l2模块,然后在使用摄像头的程序里边选择v4l2的源就可以了。对了,这个v4l2设备就是切入点。我只需要设置一个v4l2设备,然后在需要摄像头的软件里选择这个摄像头即可。那么这个摄像头显示的内容要从哪儿来呢?

再回想一下我曾经说过的与视频流相关的东西什么?对了,ffmpeg就可以做到这一点。ffmpeg是十分强大的一个工具,转码、录制直播、向直播间推流甚至是录屏,都可以通过ffmpeg来完成。所以将两者结合,即可打造一个虚拟的摄像头设备。

二、实现过程

接下来就看看如何实现。

  • 安装v4l2loopback。直接安装v4l2loopback-dkms这个包就行了。注意啊,只支持Linux,MAC也许也可以?
  • 查看当前的视频捕获设备,方便之后判断成功与否

    • 通过命令ls /dev/ | grep video查看,或者文件管理器去往/dev/浏览video文件名的文件——所以你一定要明白,Linux用命令行更多的时候是因为方便,而不是离不开。
    • 像我的笔记本,因为自带一个摄像头,所以我应该可以找到一个名为video0的文件,象征着存在一个视频捕获设备。如果有更多,则会有更多的文件出现在这里,反之你就找不到就对了。
  • 加载v4l2模块sudo modprobe v4l2loopback
  • 再查看刚刚的文件夹,你应该会发现多出来一个video开头的文件。这就意味着虚拟摄像头创建成功了。

现在,往摄像头中传入视频源,以便使用。

  • 随便找一个视频备用
  • 使用命令ffmpeg -re -i '视频地址' -f v4l2 '刚刚新出现的video文件路径'

现在,使用任意一款使用到摄像头的软件,你会发现你会多出一个可选摄像头,选择之后显示出来的就是我们刚才使用的那段视频。

那么如何用来逃开远程监视就不必多说了吧?但是要明确一件事情啊,我只是在讨论技术,是你愿意把它拿去用在错误的地方了,这有任何问题可都不赖我。

三、虚拟麦克风

虽然用不到,但是音频和视频一般都是结伴出现的,所以既然有虚拟摄像头了,就附带着搞一个虚拟麦克风吧。不过,说是虚拟麦克风,实际上是新增了一块虚拟声卡,我们把音频流推到这个虚拟声卡上,就实现了虚拟麦克风的效果。

  • 查看/proc/asound/cards这个文本文件。它记录了这个电脑上所有的声卡。记住这几个,方便一会儿查看新增的虚拟声卡。
  • 加载虚拟声音回环模块——说人话就是加载虚拟声卡:sudo modprobe snd-aloop
  • 再查看文本文件,在最后应该新增了一项Loopback项,记住这个设备开头的数字。我这里是1

到此就说明虚拟声卡建立了。接下来尝试往这个声卡推送音频流。不过在真正使用之前,还需要找到这个虚拟声卡的设备号。

使用命令aplay -l即可查看到设备号。记住第二个Loopback行的device后的数字。我这里是1。现在就可以真正的往虚拟声卡中推送音频流了。

使用命令ffmpeg -i '文件' -f alsa hw:1,1其中,1,1分别对应刚刚要求记住的两个数字。

现在,使用任意一款使用到麦克风的软件,你会发现多出一个可选麦克风,选择之后就可以看到效果了。

视频点此

如果你使用Arch,你对启动过程中跑代码的情景一定不陌生——黑苹果也差不多。那有没有什么办法让Arch能像比如Ubuntu 这种发行版一样,启动的时候显示一个动画呢?

当然可以,只需要一个小组件即可实现开机动画自定义:plymouth

它是来自于Fedora社区的提供美化启动图形界面的功能的项目。其借助KMS实现在电脑启动完毕之前就能启动自己的目的。而KMS是啥呢?

KMS,全称Kernel mode setting。简单来说,就是让显卡在内核级别上设置分辨率之类的工作而不是在用户级别进行。至于这两个级别就别细说了,再说就多了。为了形象一些,可以类比一下WindowsXP:当XP在启动过程中,它的徽标和滚动条是在640x480模式下进行的,而当这个滚动条消失掉之后,才进入一个正常的分辨率显示。而通过KMS,则可以在出现徽标的时候就将分辨率设置正常。

KMS大概了解了——虽然没什么用——接下来看看如何通过plymouth完成开机动画的自定义。

安装plymouth,然后编辑/etc/mkinitcpio.conf——通过这个文件可以自定义内核勾子,达到KMS的目的。所谓勾子,顾名思义,会把你设定的东西都一股脑给勾起来,就启动了。

找到没有警号的HOOK一行,在base udev后加上plymouth相关的勾子,保存即可。但到底加什么,需要根据你自己的情况输入。

  • 如果你有encrypt勾子,则删除这个勾子,然后加入plymouth plymouth-encrypt两个勾子
  • 如果有systemd勾子,则加入sd-plymouth
  • 如果既有encrypt又有systemd,则将encryptplymouth-encrypt改为sd-encrypt
  • 如果你有zfs勾子,则需要再安装一个plymouth-zfs,然后将zfs替换为plymouth-zfs
  • 其他情况,则直接添加plymouth

注意:plymouth相关的勾子一定加在udev之后,顺序很重要

然后,编辑/etc/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT一行,引号的尾部增加quiet splash loglevel=3 rd.udev.log_priority=3 vt.global_cursor_default=0,保存。

现在,内核参数相关的文件修改完成,更新一下 sudo grub-mkconfig -o /boot/grub/grub.cfg(Arch分支的命令,其他分支自行查找)。

到此,plymouth安装完成,可以重启看一看效果。

如果想用更多的开机动画,可以自行安装主题,然后修改/etc/plymouth/plymouthd.conf,修改Theme=后的名称保存即可。至于默认都有哪些主题,可以通过plymouth-set-default-theme -l查看。

同样的,plymouth不止可以自定义启动界面,还有一些细节可供调整。我感觉最好的一项就是可以从开机动画渐变效果到登录界面。很平滑的感觉。

  • 禁用的登录器服务。对于KDE默认的sddm,只需要systemctl disable sddm
  • 启用登录器对应的plymouth服务。对于KDE默认的sddm,只需要systemctl enable sddm-plymouth

很多登录器都支持这种服务,包括GDM、LXDM、SLiM、LightDM,服务名称也很有规律:登录器名称-plymouth

视频点此

如果你想使用你的硬盘,格式化是必须要进行的一个步骤。格式化时,总会接触到一个选项:磁盘类型——或者叫文件系统。现如今,有一堆的文件系统可供选择,至于使用哪种,就要取决于你的操作系统和正在格式化的介质是什么了。举个例子,在我的arch上,我想格式化我的U盘,我可以选择FAT32、NTFS、EXT4等等。所以,到底要怎么选择使用的文件系统呢?

我不打算介绍原理,一来很枯燥,二来我也不懂。这里只介绍一下来源和主要的功能特性供了解即可。当然,市面上的文件系统有很多,而大多数又并不常用——或者说,当下被人们熟知的只有NTFS这个文件系统吧…因此只说一些你听着可能会听亲切的文件系统们,罕见的就不提了。

再来简单说一句,为什么需要有文件系统?文件系统的工作,就是把硬盘扇区按组结合成更大的独立单位——称为簇或者块,并建立每个文件所在的组的索引。这部分具体的可以翻看我之前说过的硬盘分区相关内容。

一、FAT家族

FAT家族是DOS和Windows系统的第一款文件系统,全称File allocation table,文件分配表——系统。它有3个主要的版本:FAT12、FAT16和FAT32. 数字增大不止意味着版本更新,可以包含的簇数量、最大文件和最大分区大小也是逐次增大的。

FAT12,按簇大小8K来计算,最大文件和最大分区容量都可以支持到32M,而4KB的簇,最大只支持到16M。

FAT16,不同的簇大小也有不同的结果。最大文件体积可能是2G,可能是4G,而分区大小最多最多可以支持到16G。但16G的情况下,簇大小被分配到了256k,内部碎片是很多的。

FAT32,相对前两个FAT版本会更为人熟知吧,毕竟现如今也在应用之中。这种FAT文件系统,最大文件4G,而理论上的最大分区可以支持到16T——相比FAT16是很惊人的提升——然而,数字变大的时候,理论和实际之间就出现了很大的偏差。对于windows系统,FAT32分区最大只能到32G,而其他的操作系统,FAT32分区最大只能到2T。可见分区容量瓶颈从文件系统短板转变成了操作系统短板了。但是,得益于FAT32几乎全平台的支持,且支持的最大分区容量足够高——当然我指的是非windows平台——这个文件系统至今也是比较流行的文件系统之一。一个很明显的例子:EFI启动的主板,启动分区一定是FAT32的——虽然16也可以。

二、NTFS

FAT32在windows上的容量短板促使微软推出了更完善,更强大的文件系统。这种文件系统也是微软家族至今在使用的文件系统:NTFS(New Technology File System)。这个文件系统于1993年推出,目的就是为了解决FAT32的限制。NTFS的提升很大,单文件大小支持到了16EB,可以说没有文件大小限制了。NTFS是一个日志文件系统,说人话就是它维护着一个磁盘操作记录,这保证了它可以在系统崩溃或意外断电之后,对文件进行复原以保证数据的完整性。相对于FAT32,NTFS还支持权限和加密功能,比如可以给一个文件只读属性,那么删除和修改等等就不能进行了。这可以更方便的保证操作系统本身不被破坏掉,因此现如今的windows会强制使用NTFS分区作为系统分区。

NTFS确实不错,但是它在非windows平台的兼容性并不理想:最简单的例子,对于macos和老版本的Linux,NTFS在默认情况下对它们来说是只读的文件系统。而对于比如mp3、mp4这种独立的媒体播放器来说,NTFS直接就不能读取了。

三、exFAT

为了解决FAT文件系统的瓶颈,微软还有另一条分支线路:exFAT(extended FAT)。这种文件系统由微软在2006年推出,主要应用在U盘一类的移动存储介质上面。这种文件系统没有NTFS那么复杂,但是相对于FAT32同样有着一个很显著的优势:单文件大小最大同样支持到了16EB。而且它相对于NTFS有着更广泛的平台兼容性:对于macos,这个文件系统可以直接读写,而近些版本的安卓同样支持了这个文件系统。对于Linux,之前需要单独安装由三星开发的exFAT的驱动模块。而去年微软开放了exFAT并将其添加到了Linux内核中,预计从Linux5.7内核开始,exFAT的驱动将换成微软的代码,且将实现开箱即用,低复杂度、几乎无限大的文件体积支持,又有着广泛的兼容性,显然,这个文件系统是移动存储介质——包括SD卡的最佳选择。

四、ext家族

现在,回到Linux。1992年,针对Linux的extened file system(EXT)文件系统开始开发,并于1993年发布了ext2文件系统。这个在当时成为了很多发行版默认的文件系统。2001年,这个文件系统同样增加了日志功能,名称变更成了ext3。2008年,ext4发布,同时,这个文件系统也成为了Linux的默认文件系统。EXT4,单文件最大支持16T,分区容量支持到1EB。但是,因为是针对Linux出现的文件系统,ext家族都不能原生支持windows和macos——当然,可以通过软件实现访问,但是并不推荐。

五、苹果家族

1985年,苹果推出了自己的文件系统:HFS(Hierarchical File System)。它支持单文件2G,分区最高2T。1998年,文件系统加入了日志功能,并且对于macos10.4以后的版本来说,单文件和分区容量支持提升到了8EB,这个文件系统被命名为HFS+。2017年,苹果宣布了一个专为SSD或者其他固态存储设备设计的新文件系统APFS(Apple File System)。当然,这些文件系统都是苹果自己的产品,所以这三种文件系统均不支持微软平台和Linux平台。

六、选择

所以要怎么选择分区的文件系统呢?对于系统分区,windows7以上必须使用NTFS,Linux系统,ext4是最简单的。也可以选择其他的类型,但是可能需要自己单独增加一些内核模块以保证支持使用的文件系统。而苹果,HFS+或者APFS就无所谓了。不过APFS可能更先进一些吧?

对于U盘,如果容量低于32G,FAT32可能是更好的选择,因为它的平台兼容性是最强的。而对于32G以上容量的U盘,或者你的U盘需要存储大于4G的单个文件,那么exFAT就是一个好选择了。就我个人的经验来说,最好不要将NTFS应用到U盘的文件系统上,因为有时候会出现莫名其妙的权限问题导致U盘不可用。

对于其他分区或者移动硬盘,NTFS自然是最适合用在windows系统上面的了。而如果你需要经常在windows和mac之间交换数据的话,exFAT是一个不错的选择——加上Linux也一样。对于Linux,虽然NTFS也可以用在Linux上面,但是会出现莫名其妙的写入错误——比如说当你使用Steam Linux安装CSGO到一个NTFS的游戏库中时,你将永远得到一个“校验失败“的提示。所以,如果你的Linux有不同的分区,请让它们使用非NTFS的、Linux支持的文件系统。

视频点此

很早的时候,我曾经出过一期内容关于如何用ffmpeg保存b站的直播,但是前些日子有朋友跟我反应说现在会403了。想想也很正常,毕竟如果都那样做的话,主播就没有人气了。但是b站直播现在并没有回放功能,所以我如果想保存的话要怎么办呢?那今天给出一个可以算是两全其美的办法 既可以保存下来直播的内容,又不会影响主播真实的人气。

其实方法很简单,但是我很纳闷为什么一直就没有人会想到这个方法。总共就三个步骤。

首先在主播的直播间页面打开万能的f12。所以推荐使用chrome浏览器完成。

切换到network标签,刷新一下。

会有一个一直在请求的项目,复制这个项目的地址到地址栏,回车。

好了,弹出下载对话框了,选择一个位置保存吧。

究其原因,403是请求被拒绝,那原因可能就在于现在加入了请求来源的认证,必须是你已经登陆的用户或者说浏览器访问,所以浏览器可以下载保存。也正因此如果用迅雷之类的下载软件的话可能就不能完成这操作的了。

这个优势和使用之前的ffmpeg一样,不会因为主播或自己的网络问题导致录屏卡顿。同时因为这种下载的本质就是在看直播,只不过是不发弹幕不刷礼物的看直播,所以主播的观看人数可以保证,但人气会受到影响。所以能看直播还是直接看直播吧,这是对主播最直接的支持。

相比ffmpeg,这种方法避免了命令行操作,所以使用上来讲会更简单。但是简单的同时,这种因为需要手动操作,所以不能做到ffmpeg可以实现的定时录制。

同时,和ffmpeg一样,你并不能保存弹幕。

那如果想要定时录制的话,还是需要用ffmpeg。那因为现在加入了认证,所以我们需要把认证伪装成浏览器。换句话说,需要正经的请求头。但是毕竟加上了认证,说明ffmpeg拉流确实会有利益和版权之类的问题,所以我就不再细说了,只给出一个小提示:ffmpeg加请求头的参数是-header,至于怎么用就不要再问我了。

视频点此

网课、开会、直播,总会要求有电脑摄像头。但是为这一段时间而单独购买一个摄像头不值当,就不如让手机来完成这一角色,画质还好。

一、电脑端

Archlinux通过AUR安装,其他发行版就自己找一找吧。

AUR安装DroidCam。注意编辑PKGBUILD,将headers的依赖修改为与你的内核相对应的版本。比如默认的linux内核就保持默认的linux-headers依赖,lts内核就改成linux-headers-lts,以此类推。

完成后重启,载入模块sudo modprobe v4l2loopback_dc

二、手机端

搜索安装droidcamx即可。

三、使用

现在,将电脑和手机连入同一个局域网,启动手机应用,会给出ip和端口号。启动电脑端程序,将给出的ip和端口号填入,连接。

你会发现手机端启动相机功能了。那么如何在电脑上使用它呢?

只需要打开任何一款有视频捕获功能的程序,比如OBS,新建视频捕获设备(V4L2),其中的设备选择v4l2loopback一项,确定。你会发现你的手机已经作为电脑摄像头使用了。但是你会发现,这个镜头的分辨率很低,有没有办法提高它呢?

四、提升分辨率

很简单。首先关闭所有正在使用摄像头的程序,然后停止内核模块:sudo rmmod v4l2loopback_dc

编辑/etc/modprobe.d/droidcam.conf,将其中的widthheight修改为自己想要的宽高比,保存(没有这两个参数则直接写入即可)。需要注意,免费版程序只能用4:3的分辨率,其他比例的分辨率会拉拉伸画面。

再次启用模块:sudo modprobe v4l2loopback_dc,重新打开捕获程序,分辨率就提高了。

最后,就像前一篇文章。如果你的AUR获取有问题,那么可以尝试使用我这里提供的两个源文件:icon2.pngdroidcam.tar.bz2。或者你可以直接使用我编译好的droidcam-6.7.5-4-x86_64.pkg.tar.xz安装。但由于每个人的电脑环境不同,这个不能保证可以正常使用——尤其是非lts内核的用户。