⬑
让Linux失去色彩
2023-07-05这件事情的起因是我看了这么一篇文章:《戒掉“手机瘾”,你需要这个小技巧》
有个新研究显示,相较于用应用程序来限制使用时间,把手机改成黑白屏幕的效果更好。
其中iOS和Android都自带了把屏幕显示变成黑白灰度的功能,主要是提供给色盲群体。而 Windows 10上也有类似的功能。我现在手头没有macOS设备,不过既然iOS上有,macOS自然也没有不行的道理。
问题来到了Linux这里。Linux上是没有原生提供这种工具的,唯一一个比较接近的是 RedShift。
但是这个工具的原理是调节Gamma值,因此只能调整红绿蓝三种颜色的比例,而不能把屏幕变成灰度。
最后我找到的解决方案是用picom。
Picom是一个X compositor,支持OpenGL渲染,所以可以自己写一个OpenGL着色器控制显示效果:
#version 330
in vec2 texcoord;
uniform sampler2D tex;
vec4 window_shader() {
vec4 c = texelFetch(tex, ivec2(texcoord), 0);
float grayscale = c.x * 0.299 + c.y * 0.587 + c.z * 0.114;
c.x = grayscale;
c.y = grayscale;
c.z = grayscale;
return c;
}
因为人眼对于红绿蓝三种颜色的敏感程度不同,所以这里用了NTSC制式下的彩色转黑白公 式,将红绿蓝以0.299:0.587:0.114的比例配比,计算出灰度值,然后把红绿蓝都设置为这 个灰度值,就可以把彩色图像转成黑白。其实用红绿蓝三个颜色的强度的平均值也可以, 效果也差不多。
把着色器保存在~/.picom.glsl,然后运行picom:
picom --backend glx --window-shader-fg '/home/mistivia/.picom.glsl' &
就可以看到屏幕变成了黑白。如果要开机自动执行的话,可以把这行命令放到 .xinitrc里面。如果要恢复成彩色的话,只要把picom进程杀掉就可以了。
Email: i (at) mistivia (dot) com