AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 526537
Accepted
Display name
Display name
Asked: 2019-06-24 17:31:40 +0800 CST2019-06-24 17:31:40 +0800 CST 2019-06-24 17:31:40 +0800 CST

是否可以将我的显示器更改为琥珀色单色?

  • 772

我知道这听起来很愚蠢,而且我不打算使用这么多,但是有没有办法xrandr或类似的方法让我的显示器显示相当于灰度但使用颜色而不是灰色?我认为对于某些应用程序来说这将是一个非常酷的效果。

x11 xrandr
  • 4 4 个回答
  • 2601 Views

4 个回答

  • Voted
  1. Best Answer
    Stephen Kitt
    2019-06-25T03:41:45+08:002019-06-25T03:41:45+08:00

    (这仅针对 X11,而不是 Wayland 或其他显示管理系统。其中一些技术可以使用其他工具应用,例如GNOME Shell的辅助功能。)

    我可以想到两种获得琥珀色显示的方法:插入一个合成插件来修复所有颜色,并创建一个颜色配置文件将所有颜色校正为琥珀色等价物。这两者都可能涉及比它们值得付出更多的努力(除了学习方面)。

    正如sigvei 的回答中所解释的那样,您可以通过操纵每个通道的伽玛来获得原色显示的良好近似值;xcalib也可以访问它,并允许直接控制亮度和对比度以及指定伽马值:

    xcalib -blue 1.0 0 1.0 -red 1.0 0 1.0 -alter
    

    结果显示为绿色。亮度和对比度应用于伽马斜坡,因此xrandr可以让您获得相同的结果。

    仍然可以更精细地控制伽马斜坡,但这不会允许您将所有内容重新映射为琥珀色。您可以将通道“钳制”到特定范围,例如,鲜红色会引入一些绿色,因此看起来更像琥珀色,但深红色会出现绿色......

    以下代码显示了如何解决这个问题(没有错误处理):

    #include <X11/Xos.h>
    #include <X11/Xlib.h>
    #include <X11/extensions/xf86vmode.h>
    #include <stdlib.h>
    
    int main(int argc, char **argv) {
      Display * dpy = NULL;
      int screen = -1;
      u_int16_t * r_ramp = NULL, * g_ramp = NULL, * b_ramp = NULL;
      unsigned int ramp_size = 256;
      int r_tgt = 255, g_tgt = 191, b_tgt = 0;
      int i;
    
      dpy = XOpenDisplay(NULL);
      screen = DefaultScreen(dpy);
    
      /* Set up ramps */
      XF86VidModeGetGammaRampSize(dpy, screen, &ramp_size);
      r_ramp = (unsigned short *) calloc(ramp_size, sizeof(u_int16_t));
      g_ramp = (unsigned short *) calloc(ramp_size, sizeof(u_int16_t));
      b_ramp = (unsigned short *) calloc(ramp_size, sizeof(u_int16_t));
      for (i = 0; i < ramp_size; i++) {
        r_ramp[i] = r_tgt * 256 * i / ramp_size;
        g_ramp[i] = g_tgt * 256 * i / ramp_size;
        b_ramp[i] = b_tgt * 256 * i / ramp_size;
      }
      XF86VidModeSetGammaRamp(dpy, screen, ramp_size, r_ramp, g_ramp, b_ramp);
      XCloseDisplay(dpy);
    }
    

    (您需要-lX11 -lXxf86vm链接。)

    • 6
  2. pusillanimous
    2019-06-25T02:34:38+08:002019-06-25T02:34:38+08:00

    xrandr --output $OUTPUT --gamma 1:0.01:0.01为您提供几乎单色的红底黑字。

    三元组数字是用于伽马校正的 rgb 值,以 : 分隔,范围为 0-1。替换1:0.01:0.01为0.01:1:0.01绿色和0.01:0.01:1蓝色。除了这三种基本颜色之外,很难制作任何其他颜色。一旦你开始让一种以上的颜色通过,它就会变得非常明显。

    此方法仅适用于深色/黑色背景,因为亮白色的伽马校正只是白色。

    用于xrandr -q查找要用于的输出 ID $OUTPUT;例如,我的笔记本电脑屏幕是 LVDS-1。

    • 3
  3. Ruslan
    2020-02-15T15:00:07+08:002020-02-15T15:00:07+08:00

    如果您使用支持插件的合成窗口管理器,您可能会制作一个插件来根据需要更改屏幕像素,即计算输入像素的亮度并使用琥珀色调制结果(根据需要来回应用伽马校正)。

    这是一个破解 KDE 窗口管理器 KWin 中的反转效果的示例,以实现此目的。这个 hack 包括简单地用自定义代码替换位于 KWin 源代码树下的反转效果着色器effects/invert/data/1.40/invert.frag(假设您的 GPU 能够支持 GLSL 1.40):

    #version 140
    uniform sampler2D sampler;
    uniform vec4 modulation;
    uniform float saturation;
    
    in vec2 texcoord0;
    
    out vec4 fragColor;
    
    void main()
    {
        vec4 tex = texture(sampler, texcoord0);
        float luminance = dot(vec3(0.2126729,0.7151522,0.0721750), pow(tex.rgb,vec3(2.2)));
        float desaturated = pow(luminance, 1./2.2);
    
        const vec3 amber=vec3(1.,0.5,0.);
        tex.rgb = desaturated*amber;
        tex *= modulation;
        tex.rgb *= tex.a;
    
        fragColor = tex;
    }
    

    在 KDE4 KWin 中,您可以简单地替换安装到的着色器文件(已在上面给出的代码/usr/share/apps/kwin/shaders/1.40/invert.frag中替换为)。不幸的是,从 KDE5 开始,着色器作为 Qt 资源内置在插件二进制文件中,因此您必须使用在源树中编辑的文件重新编译 KWin,才能应用新的着色器。texcoord0varyingTexCoords

    结果看起来像下面的屏幕截图所示,当效果通过其快捷键组合激活时(在 KDE4 KWin 上,在带有专有nvidia驱动程序的 Geforce GTX 750Ti 上测试)。注意鼠标光标保持不变,因为它通常不是由窗口管理器渲染的,所以它应该以另一种方式改变,或者像缩放效果那样模拟。

    实际效果截图

    • 2
  4. somebody
    2019-06-24T21:57:00+08:002019-06-24T21:57:00+08:00

    哇!虽然可以更改终端的颜色。我很确定您不打算将您的桌面体验转换为灰度。

    也就是说,这里涉及到几个活动部件。最相关的是您选择的终端模拟器。例如xterm( FreeBSD ) ( Linux ) 允许对表示的许多方面进行修改。如果您正在寻找黑色背景上的琥珀色文本(琥珀色单色)。你可以这样实现

    在我的桌面左上角创建一个 87 行 x 57 列的 Xterm 窗口,其背景为黑色,带有琥珀色文本,使用我的登录 shell 和琥珀色闪烁块光标

    xterm -geometry 84x57+0+0 -C -ls -bg black -fg gold -cr gold
    

    您甚至可以更改指针的颜色 -ms color

    注意我选择了金色,因为它看起来最接近我记得我的琥珀色单色显示器的实际颜色。您可以在X11 颜色表中找到所有可用的颜色

    说到登录外壳;另一个影响因素是您选择的外壳。我的是(t)csh,鉴于我对此很熟悉,我将为此提供另一个示例;

    这是我的相关摘录.cshrc

    ...
    
    setenv  PAGER   less
    setenv  BLOCKSIZE   K
    setenv  CLICOLOR
    
    # Colors!
    set     red="%{\033[1;31m%}"
    set   green="%{\033[0;32m%}"
    set  yellow="%{\033[1;33m%}"
    set    blue="%{\033[1;34m%}"
    set magenta="%{\033[1;35m%}"
    set    cyan="%{\033[1;36m%}"
    set   white="%{\033[0;37m%}"
    set     end="%{\033[0m%}" # This is needed at the end
    
    ...
    
    # Prompt style
    set prompt = "${yellow}`/bin/hostname -s` %#${end} "
    set promptchars = "%#"
    

    这将有效地在黑色背景上提供琥珀色提示。您可以调整ANSI转义序列以获得您正在寻找的确切黄色(琥珀色)阴影。您也可以将这些转义序列应用于任何其他 shell 提示符。

    • -1

相关问题

  • Arch Linux:在没有窗口管理器的情况下运行 VirtualBox (VM)

  • xrdb 冒号丢失错误

  • 在不改变分辨率的情况下让事情变得更大?[伴侣]

  • 旋转网络摄像头和屏幕(纵向模式)

  • SSH X11 转发仅在使用受信任时有效

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve