Netplan 是 Canonical 推出的一款抽象网络配置生成器,可以通过一个或多个 yaml 格式的配置文件,生成所需的网络配置,并应用到系统中。用户只需要在配置文件中描述好每个网络接口的各种参数属性,即可生成适用于 NetworkManager (一般用于桌面环境)或 Systemd-networkd (一般用于服务器环境)的网络配置。我对它的理解就是,你对于计算机网络的规划,你希望计算机的网络是什么样的,你就怎么写配置文件,它就按照你的配置文件帮你生成网络配置文件,是非常简单明了的工具。
它的工作原理如下:
在 Netplan 没有出来之前,Ubuntu 的网络配置一直是 ifupdown 管理,配置文件冗长,可读性不高,甚至有一些是无法用配置文件进行描述的。
1 | # This file describes the network interfaces available on your system |
而且,ifupdown 的配置文件并不能跨设备通用,每个设备的网卡信息都是固定的。在批量部署设备网络时,Netplan 拥有的 match 功能显然更胜一筹,用户可以通过名称、MAC 地址或者是内核驱动名称来匹配网络接口,从而实现用一份配置文件来配置多个设备的网络。
除此之外,Netplan 不会在引导期间进行过多的配置操作,再也不会因为开机等待 DHCP 而卡住等半天了,一些没有被配置文件涵盖的设备也不会被触发,所有的配置都是在开机的时候读取配置文件生成的,只加载必要的部分,大大提高了开机的效率。
说了这么多,让我们开始 Netplan 的配置吧。
Netplan 的配置文件存放于三个不同的位置分别是 /run/netplan/
,/etc/netplan/
和 /lib/netplan/
,我们修改的是 /etc/netplan/
目录下的配置文件,其他两个目录会在配置生效的时候自动同步配置。你可以在配置文件目录下存放多个 yaml 文件,它们会被按照字母顺序加载,并且同名值会被后加载的覆盖。
下面是一个基础的配置文件,这份配置文件会 NetworkManager 接管所有的网络设备,并所有以太网设备启用默认 DHCP(如果找到 DHCP 服务器的话)。如果将 renderer
改为 Systemd-networkd 的话,则不会启用 DHCP ,需要在配置文件指定设备才会启用。
编写配置文件的时候,缩进时要使用空格,不可使用 Tab 来缩进,空格数量不做要求,但是每一层级前面的空格数量必须相同,否则会导致配置文件读取错误。
1 | network: |
显然,这样一份配置文件是不够的,我们需要更加详细的配置文件来适应各种需求。
为网卡 enp3s0 启用 IPv4 的 DHCP 并禁用 IPv6 的 DHCP 。
1 | network: |
这里我们来为网卡 enp3s0 设置一个静态的内网 IP :
1 | network: |
在书写这份文件的时候要注意:
在给树莓派等设备配置网络的时候,经常会要连接 Wi-Fi ,如果有图形界面还比较简单,要是没有图形界面,可能有时候就没那么方便了。但是用 Netplan 的话,一切都很方便。下面就是一个简单的无线网络配置文件,你甚至不用声明是 WAP 认证方式:
1 | network: |
如果你用的是 WAP with EAP 等比较复杂的认证方式,用 Netplan 也可以轻松解决:
1 | network: |
假如你的电脑有两个网卡,同时接入了两个不同的 DHCP 网络,你可以设置优先级来让系统自动选择网络:(在这里 enfirst
比 ensecond
有着更高的优先级)
1 | network: |
除了上述这些简单常见的配置,Netplan 还支持网桥、调制解码器(Modems)、隧道、VLAN 等等设备的配置,更多的配置请参阅官网的文档。
在编写完成配置文件后,我们可以在终端执行指令 generate
来生成配置文件:
1 | sudo netplan generate |
然后使用 apply
来应用生成的配置文件,必要时它会重启对应的网络服务:
1 | sudo netplan apply |
也可以使用 try
来测试生成的配置文件,如果失败了,则会自动回滚到上一次的配置文件,成功则可以按 Enter 应用配置文件:
1 | sudo netplan try |
Netplan 作为新的网络配置生成器,配置文件简单,可用性高,操作方便,而且带有试错机会,可以说再也不用担心配不好 Linux 服务器的网络啦。建议大家都用一用,体验一下这种新鲜的配网方式。更多的用法就请看 Netplan 的官网啦:https://netplan.io
]]>首先我们先新建一个类 ListItem 作为存放列表内容的对象。
ListItem.class
1 | public class ListItem { |
这里我设计了 5 个不同的样式:列表的头部、仅有文字的列表项目、带有小图片的列表项目、带有大图片的列表项目和列表的尾部。
列表的头部的是常见的左右滚动形式,其他几个部分则是简单的 Card ,最后列表的尾部为一行文字。
为了不贴出太多代码,影响阅读体验,这里就放出头部的和仅有文字的列表项目的 XML 文件,其他的文件会在项目的 GitHub Repo 中放出。
item_list_header.xml
这里使用一个 HorizontalScrollView 包裹一个 LinearLayout 实现横向滚动效果,实际使用时可以用一个横向的 RecyclerView 替代。
1 | <?xml version="1.0" encoding="utf-8"?> |
item_text_only.xml
简单的一个 CardView 。
1 | <?xml version="1.0" encoding="utf-8"?> |
ListAdapter.java
这里大体跟一般使用 RecyclerView.Adapter 一样,但是重写了 getItemViewType() 方法,根据 position 返回不同的 Type ,getItemCount() 的返回值也从一般的列表 Size 变成了 Size + 2 ,因为多了头部和尾部两个项目。其他的一些改动请看代码,部分重复或无关代码已省略。
1 | public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ItemViewHolder> { |
这部分就是给 RecyclerView 设置刚刚完成的 Adapter ,然后填上对应的内容,至此,整个列表就完成了。
1 | public class MainActivity extends AppCompatActivity { |
就是上面那个图片啦,我是做出来才截图的。
整个过程的源码已经上传到 GitHub ,项目地址:点这里 ,如有错误或瑕疵,欢迎提出。
如果想试试整个 App 的效果可以到这里下载体验。
]]>Room 包含 3 个主要组件:
具体的各个组件的说明请查阅官方文档(地址)。下面将讲解如何使用 Room 快速构建一个数据库并配合 RecyclerView 输出数据库内容,实现一个简单的购物清单。
文中代码重复度较高的地方会进行省略,如果需要完整代码请到文末 GitHub 仓库获取
在 Android Studio 中创建一个新工程,这里我选用 Basic Activity 模板,你可以根据自己的需求选不同的模板来创建工程。
在应用或模块的 build.gradle 文件中添加:
1 | dependencies { |
添加完成后记得点击右上角的 Sync Now 同步一下依赖。
新建一个名为 ListItem.java
的文件:
1 | @Entity(tableName = "items") // 自定义表名 |
DAO(Data Access Object, 中文为数据访问对象) 是一个面向对象的数据库接口,所以我们新建一个 interface
名为 ListItemDAO.java
,实现数据操作的一些定义:
1 | @Dao |
这一步我们来创建整个 App 的数据库。新建一个文件名为 AppDatabase.java
,设置其为 abstract
并继承于 RoomDatabase
:
如果您的应用在单个进程中运行,则在实例化
AppDatabase
对象时应遵循单例设计模式。每个RoomDatabase
实例的成本相当高,而您几乎不需要在单个进程中访问多个实例。
1 | @Database(entities = {ListItem.class}, version = 1, exportSchema = false) |
至此,整个数据库已经创建完毕,可以通过 DAO 对数据库进行操作:
1 | // 插入数据 |
但是这样操作存在一定问题:
所以我们来新建一个仓库,用来简化代码,并实现多线程来进行数据库操作,避免卡顿。
新建名为 ListItemRepository.java
的文件:
1 | public class ListItemRepository { |
现在我们就可以用这样的方式来操作数据库了:
1 | // 一次创建,多次使用,多线程操作,不会导致 UI 卡顿 |
这样代码写起来就非常方便了,不用再啰啰嗦嗦去获取 DAO 。
现在我们来正式使用数据库。在布局文件中添加 RecyclerView 并新建对应文件。这里以 fragment_first.xml
为例:
1 | <?xml version="1.0" encoding="utf-8"?> |
以 item_list.xml
为例:
1 | <?xml version="1.0" encoding="utf-8"?> |
以 ListAdapter.java
为例:
1 | public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ItemViewHolder> { |
在对应的位置添加上 RecyclerView 的初始化代码,这里以 FirstFragment.java
为例:
1 | public class FirstFragment extends Fragment { |
给 MainActivity
的浮动按钮添加一个弹出对话框的效果,用来添加新物品到数据库:
1 | public class MainActivity extends AppCompatActivity { |
布局不太好看,不要介意,看效果就好。
整个过程的源码已经上传到 GitHub ,项目地址:点这里 ,如有错误或瑕疵,欢迎提出。
如果想试试整个 App 的效果可以到这里下载体验。
]]>activity_main.xml
中的 android:paddingTop="?attr/actionBarSize"
属性activity_main.xml
中的 nav_host_fragment
添加 android:layout_marginBottom="?attr/actionBarSize"
属性新建完 BottomNavigationView 后通过虚拟机启动,可以看到以下画面,没有别的元素时,不会发现问题。(其实如果眼尖一点,可以发现文字不是居中的。)
但是如果我们在任意一个 Fragment 里面创建一点内容,这里以一个带颜色的 View 和原本自带的文字为例,View 我设置宽高均匹配父元素,把文本放到了底部的位置,代码如下。
1 | <?xml version="1.0" encoding="utf-8"?> |
在编辑器里面预览的效果是这样:
现在,让我们再次启动程序,就会发现,View 的上方少了一块,本该在底部的文字也不见了。
可以看到,Fragment 的上方是没有跟父级元素贴合的,这个就导致了 Fragment 没有跟上方贴合。
一番 Google 后并没找到什么别人的解决方案,就自己在项目里到处看,最后发现,在 activity_main.xml
中的外层框架,有个属性 android:paddingTop="?attr/actionBarSize"
,意思是在上方空出空间给 Action Bar ,而这个代码本身的 Action Bar 并不需要预留空间,所以去掉这个就好了。
现在的效果就是这样:
诶?文字呢?怎么文字还是看不到?
再回去编辑器里看,发现底部的导航栏其实是覆盖在 Fragment 上的,也就是说文字被这个挡住了,那再来一个 padding 吧,这次加给 Fragment 就好了, android:layout_marginBottom="?attr/actionBarSize"
,导航栏的高度是跟顶部 Action Bar 一样的。
这下子就没问题了:
以上就是修正 BottomNavigationView 中 Fragment 位置错误的完整过程啦,其实就是水博客。(
]]>因为受够了 EMMC 5.1 的缓慢,在家又抑制不住剁手之力,于是在苏宁天猫店购入了这台 Pro 3 ,换掉手上的 Pro 2S 。算起来这个已经是手上第三台坚果 Pro 系列手机了。一起来看看没有了罗老师的坚果手机,会是什么样吧。
废话不多说,先看东西,图不多,就几张。(没什么拍照的好环境,就随手拍了两张,下次好好拍www
竖条方案,化整为零,将各种元素打散,搭配附加元素,统一特征造型,调整间距,得到乱中有序的造型
终于用上了锤科的白色机子。这次白色机子不会太贵,我买的时候苏宁/官网折扣价叠加优惠券大概是 2449/2499 ,而且苏宁有 24 期免息,简直就是不要钱。(敲
正面就没什么好说的了,刘海屏,还有点下巴,千元机水平,不过还好有个屏下指纹,显示效果也还算可以,就勉强接受了。
侧面类似 iPhone 4S 的三层结构,加上 6.39 英寸的屏幕,对我来说还是挺大的,上半部分的屏幕需要变换手势才能碰到,不过这个在之前用别的手机的时候就习惯了,没啥好说的。但是这次 Pro 3 的大 R 角给了我一定的缓解,在变换手势的时候不会那么难受,而且得益于侧边比较宽的边框,手心的肉不会按到屏幕了,突然开心。(((
重量的话,看官网参数是要比坚果 Pro 2S 重上 20 克,但是实际上手感觉也差不多。
这部分大概就是这样了吧,待我多用几天看看有没有新的体验。
Smartisan OS (以下简称 SOS )从诞生至今一直饱受争议,如今更新到 7.0 的大版本,来看看现在的它又怎样。
因为博客图片样式受限,本文放的都是拼接压缩后的图片,稍后会有另外一篇文章是截图原图。
如果之前有使用过 SOS 的话,可以发现这次升级可谓是大改动。整体的风格都往活泼的方向调整, 显得更有活力。新的字体 Smartisan T 黑的使用,使得整体的可读性有所提高,字重效果也得到了完善(虽然据说在一些地方字重还是有问题)。
这次 UI 调整里,我最喜欢的就是天气应用的调整和输入法的调整。天气不仅增加了增加了信息量,美观性也提高了很多;输入法这套新皮肤可以说非常适合 SOS 7.0 的整体风格,反正我看了是很有打字的想法。
SOS 是出了名的固执,但是其实在 7.0 版本中,也是有很多听取意见的地方,比如音量控制面板、状态栏的亮度调节,都为大众做了适配。不过我个人是不太喜欢这次改动,这个格状的进度条其实跟系统显得有点格格不入,如果能换回原来那种条形进度条再加以修饰应该会更好看些。
通知管理也跟上了 Android 大版本的步伐,支持根据通知的类型来分类设置,可以定向屏蔽掉一些通知。(但是快捷操作那些你也跟上啊喂!)这次也有游戏模式之类的,而且这次不再是之前的清理内存然后关闭 VPN 之类的了,有了一个侧边栏,通知消息的模式也可以更改,应该算是一个比较游戏的游戏模式了。
剩下的就是 SOS 的一点特色功能了。
以及一些人性化的优化和细节。
锁屏单击空白处可以隐藏时间等其他挡住壁纸的元素,这样就不担心老婆被挡住了!(敲
短信的操作逻辑也更符合一些操作直觉。
系统大概就看到这里吧,到时候看看需不需要写一篇深度的系统体验。
整机:
上手使用了两天,对这一代手机还是比较满意的,硬件基本达到主流旗舰水平,品控也是相对较好,没有遇到什么很奇怪的问题,系统优化也是做足了,日常使用没有遇到卡顿之类的问题,不过有时候会感觉网速慢,不知是家里的网络问题还是手机的问题,之前使用 Pro 2S 是没问题的,过阵子再检测一下问题吧。
续航:
使用锤子手机的时候一直不会在意续航,即使手机只有 50% 的电量我也会直接出门,这次 Pro 3 的续航也算中规中矩吧,虽然不是用着主打低功耗的 CPU ,但是使用起来也不会说续航多差,估计新机都是这样吧,过阵子看看如何。
相机:
能拍照,功能多,具体出片等下次。
拿到新机是挺开心的,但是还是有些不满:
盒子里面配送的充电套装是 18W USB A 口的充电器和对应的数据线,不是 C 口的充电器,有点可惜。
出厂贴膜不是很好,疏油效果一般,容易沾指纹。
屏幕边框有一点点瑕疵,SIM 卡托于卡槽之间的间隙有点大。
除了机子外部的一些不满之外,系统也有些细节令我不开心:
桌面下滑默认是搜索且不能关闭,希望能增加一个开关,甚至能改成下拉状态栏。
计算器依旧不能显示历史计算记录,上方的一大块空白就是空白。
系统流量统计依旧无法自定义统计周期,只能按照自然月开始,就别说支持日租卡等其他类型的流量套餐了。
锁屏抖音的开关有点隐蔽,而且,位置不太对,在设置桌面壁纸的地方也可以设置。
系统自带浏览器的版本还是 Chromium 62 ,历史遗留问题了。
看起来还是蛮多的,希望后面能慢慢改进吧。
坚果 Pro 3 作为经历各种风波后的回归之作,可以看的出团队的目标已经有所改变,这个改变是为了生存而作出的改变,只有生存下去了,才能做自己想做的。不过希望在改变的同时,能坚持初心,将原本好的东西坚持下来。
坚果 Pro 3 是一部合格的手机,有着合格的硬件、合格的操作系统和合理的价格,但是注定是不会被大众广泛接受的手机。在方方面面还有着各种妥协各种瑕疵,但是这些都是可以被克服或者修正的,期待后面的完善吧。
坚果 Pro 3 ,你好。❤️
]]>Hexo 是个好东西,GitHub Pages 也是个好东西,那如何将这两个好东西放在一起用呢?那就是用 Travis CI 了。
本文的目的是使用 Travis CI 来自动生成并提交 Hexo 生成的静态页面到 GitHub Pages 仓库。
使用 GitHub 账号登录 Travis CI ,授权 Travis CI 获取 GitHub 账户的资料。完成后,会跳转到 Travis CI 的页面,页面里面应该会提示你 Activate all repositories using GitHub Apps (对所有 GitHub 项目启用 Travis CI 自动构建),点击按钮后授权,以后新建的项目就都会自动启用 Travis CI 了。
在 GitHub 上创建 GP 仓库(仓库名为 GitHub 用户名 + .github.io
)和博客源码仓库(以下为 blog-factory
),均设置为公开仓库即可。
Note: 如果你不被人看到源码,那源码仓库也可以为私密仓库,但是 Travis CI 的自动构建只对公开仓库免费,私密仓库据说只有前一百次免费。
创建完仓库后,将源码仓库克隆至本地。
blog-temp
),用来生成博客的源码。Note: 之所以要另起一个文件夹是因为 Hexo 的 init 指令只能作用于空文件夹。
blog-temp
并执行以下命令:hexo init .
blog-temp
的内容复制到源码仓库 blog-factory
的文件夹中。( .git
文件夹不要复制。)Hexo 博客的配置文件是项目根目录的 _config.yml
,根据需求修改配置文件。
如果要安装主题、插件之类,也在这里配置好。
hexo server --debug
完成后 Ctrl + C 结束进程,执行 hexo clean
清理无用文件。
在项目根目录创建文件 .travis.yml
。(注意,是以 . 开头的文件,在一些文件管理器中可能不会直接显示,需要打开相关设置。)
接下来在这个文件里面写入以下内容:
1 | language: node_js # 设置语言类型 |
这样,整个构建和推送的流程脚本就编写完成了,到时候 Travis CI 就会按照上面的顺序执行,将生成的 HTML 文件推送到指定仓库指定分支。
打开 Github 的 Settings 页面,点击左边的 Developer settings ,然后选择 Personal access tokens ,点击 Generate new token ,生成一个 Token 。
在新页面中填入 Note ,设置一个名字或者其他有助于你记忆这个 Token 用途的信息,然后勾选下方 repo 的勾,会连带勾上四个子选项。
之后就拉到最下面直接保存,在新页面中会显示这个 token ,保存好,下一步要用到。
在上面的配置文件中,出现了 ${GH_NAME}
, ${GH_EMAIL}
, ${GH_TOKEN}
, ${GH_REPO}
这几个字符串,其实这个是 Travis CI 的变量引用,在执行的时候会被自动替换成已经设置好的值,现在就要来设置这几个值。
打开 Travis CI ,登录后点击右上角设置,在设置界面可以看到 GitHub 里面所有的 Repositories ,如果没有,请检查你的授权,让 Travis CI 可以获取到你的 Repositories 。
点击 blog-factory
右边的设置按钮,可以看到设置的页面,里面有一项名为 Environment Variables 的设置类。
依次添加名为 GH_NAME
, GH_EMAIL
, GH_TOKEN
,GH_REPO
,填入对应的值。
NAME | VALUE |
---|---|
GH_NAME | xMuu |
GH_EMAIL | mail@mail.com |
GH_TOKEN | 421ddfe66ed5a56ba19d6d1e1*************** |
GH_REPO | github.com/xMuu/xmuu.github.io |
Note :
GH_TOKEN
应该保存好,避免泄漏,在设置的时候不要打开 DISPLAY VALUE IN BUILD LOG 。
首先整理一下目录的内容,删除没有用的各种文件。顺便执行一次 Hexo 的清理程序:hexo clean
之后,检查安装的主题,是否有 .git
文件夹,有的话需要删除。
一切检查完毕后就在 blog-factory
目录下,执行以下命令,将博客源码上传至 GitHub 。
1 | git add . |
上传过后,可以到 Travis CI 看看构建的过程,也可以直接等待 Travis CI 的邮件然后访问 GitHub Pages 查看结果。
如果主题需要安装 npm 依赖,如果依赖多的话,建议在 Travis CI 构建的时候使用 npm install
安装,记得在上传源码的时候在 .gitignore
中排除主题目录下的 node_modules
文件夹;不多的话则可以直接将 node_modules
附带上去。
打开网站就可以看到很多版本的 Windows 镜像,也可以通过搜索来获取指定版本的镜像。(可能需要手动设置一下才会显示中文)
以搜索 19041.21 这个版本为例,我们可以看到搜索出来了这些结果,分别对应了桌面版、服务器、不同架构的镜像。一般选择 Windows 开头的 Insider 版本即可。
接下来就是对镜像的内容进行一些设置,比如语言、系统版本、集成内容等。语言选中文就可以啦。然后版本的话,没有特殊需要的话直接选单个的 Pro 就好啦,可以缩小镜像的大小。在第三个设置页面里,先选择第三个下载方式,可以增加一些其他版本的安装选项和一些附加内容,比如企业版、教育版、专业工作站版, .Net 3.5 框架等等,我一般会选择安装企业版,因为可以关闭的选项会比其他的版本多。
设置完成后,会下载一个压缩包,里面包含了刚才所选的配置和下载工具,以及下载脚本(bat 和 sh 两种格式),这个脚本会下载需要的文件然后合成一个 ISO 文件,这个文件就是 Windows 的安装镜像了,挂载提取到 FAT32 格式的 U 盘中,通过 U 盘启动就可以开始安装系统了。
]]>注:在 Linux/macOS 环境下可能会缺失一些工具,需要手动安装。
Fxxk NVIDIA~(
这一步是解决一些机子开机卡住的问题,并关闭 N 卡提高使用体验(解决发热 & 提高续航)。
sudo nano /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
并保存sudo pacman -S bbswitch
/etc/modprobe.d/bbswitch.conf
sudo nano /etc/modprobe.d/bbswitch.conf
options bbswitch load_state=0
并保存/etc/modules-load.d/bbswitch.conf
sudo nano /etc/modules-load.d/bbswitch.conf
bbswitch
并保存这样开机就会加载 bbswitch 模块并关闭 N 卡了。
sudo pacman -S zsh
oh-my-zsh 用脚本装可以直接获取更新不用等打包。
添加用户的时候加上参数-s /bin/zsh
即可将默认 shell 设置为 zsh 。
/etc/pacman.conf
sudo nano /etc/pacman.conf
Color
, TotalDownload
, VerbosePkgLists
的注释multilib
的两行注释,注意不是 testing
那两行1 | [archlinuxcn] |
sudo pacman -Syy
更新软件源数据库即可archlinuxcn : Arch Linux CN 源,作为官方社区源的补充,上面有很多官方源没有的软件包,还有些国内特色的包。
arch4edu : 面向高校用户推出的非官方软件仓库,主要包含高校用户常用的科研、教学及开发软件。
我是坚定的 KDE 党!(
sudo pacman -S plasma konsole dolphin
# 如果有选项记得选 vlcsudo pacman -Rcun discover
# 删除自带的商店,不删也行,但是这东西真的没啥用sudo pacman -S pulseaudio-bluetooth alsa-plugins alsa-utils
sudo systemctl enable sddm
sudo systemctl enable NetworkManager
中文字体我选择了 Apple 的苹方字体(中文)搭配 SF-Pro (西文)这套解决方案。具体可以看这个。
/etc/locale.conf
sudo nano /etc/locale.gen
en_GB.UTF-8
, en_US.UTF-8
, zh_CN.UTF-8
的注释sudo locale-gen
/etc/locale.conf
sudo nano /etc/locale.conf
1 | LC_TIME=en_GB.UTF-8 |
sudo pacman -S fcitx5-git fcitx5-gtk-git fcitx5-qt5-git fcitx5-chinese-addons-git kcm-fcitx5-git
kcm-fcitx5-git
是在 KDE 上的输入法配置面板。~/.pam_environment
nano ~/.pam_environment
1 | GTK_IM_MODULE=fcitx5 |
pinyin
到左边然后应用,就能使用拼音了,当然了还有五笔等一些输入方式,可以自己选通过配置硬件加速,可以获得不错的浏览体验以及视频体验。
先安装相应的驱动:
pacman -S vulkan-intel intel-media-driver libva-utils
编辑 ~/.pam_environment
nano ~/.pam_environment
写入以下内容并保存。
1 | LIBVA_DRIVER_NAME=iHD |
退出登陆后重新登陆,运行 vainfo
,如果没错误的话,应该会有这样的输出:
1 | vainfo: VA-API version: 1.6 (libva 2.5.0) |
接下来就开始安装 Chromiun 并启用一些参数使得硬件加速全开。
安装支持硬件加速版本的 Chromiun
pacman -S chromium-vaapi
这个为 AUR 包,但是在 Arch Linux CN 源有已经编译打包好的,直接安装 CN 源上的就好了。
新建配置文件 ~/.config/chromium-flags.conf
:
nano ~/.config/chromium-flags.conf
写入 --ignore-gpu-blacklist
并保存退出。(如果原来这个文件存在要确定不能有 --use-gl=egl
这个参数)
打开 Chromium 并打开 about://flags
。
搜索并启用 GPU rasterization
, Out of process rasterization
, Zero-copy rasterizer
, Viz Hit-test SurfaceLayer
, Skia API for OOP-D compositing
(如果找不到则忽略,可能被更新加入了)
打开 about://gpu
如果看到以下输出,则说明配置完成
1 | Graphics Feature Status |
新建文件 /etc/udev/rules.d/60-ioschedulers.rules
sudo nano /etc/udev/rules.d/60-ioschedulers.rules
写入下面内容并保存。
1 | ACTION=="add|change", KERNEL=="sd[a-z]|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline" |
sudo systemctl enable fstrim.timer
大概就想到这么多,其他的以后补上。
换了 macOS(Hackintosh) 了,真香!
]]>