디스플레이를 황색 단색으로 변경할 수 있나요?

디스플레이를 황색 단색으로 변경할 수 있나요?

어리석게 들리는 건 알지만 이렇게 많이 사용할 계획은 없지만 xrandr모니터가 회색조와 동일하게 표시하되 회색 대신 컬러를 사용하도록 하는 방법이나 이와 유사한 것이 있습니까? 일부 응용 프로그램에서는 이것이 정말 멋진 효과가 될 것이라고 생각합니다.

답변1

(이것은 Wayland나 기타 디스플레이 관리 시스템이 아닌 X11에만 해당됩니다. 이러한 기술 중 일부는 다른 도구를 사용하여 적용할 수 있습니다.예를 들어접근성 기능난쟁이 껍질.)

호박색 디스플레이를 얻는 두 가지 방법을 생각해 볼 수 있습니다. 모든 색상을 수정하는 합성 플러그인을 삽입하고 모든 색상을 해당 호박색으로 수정하는 색상 프로필을 만드는 것입니다. 이 두 가지 모두 아마도 가치 있는 것보다 더 많은 노력이 필요할 것입니다(학습 측면 외에도).

에 설명된 대로 각 채널의 감마 값을 조작하여 기본 색상 디스플레이에 대한 좋은 근사치를 얻을 수 있습니다.Sigvey의 답변;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( 링크가 필요합니다 .)

답변2

xrandr --output $OUTPUT --gamma 1:0.01:0.01거의 단색의 레드와 블랙 베이스를 선사합니다.

세 가지 숫자 세트는 감마 보정된 rgb 값으로, 다음으로 구분되며 범위는 0-1입니다. 녹색으로 교체, 1:0.01:0.01파란색으로 교체. 이 세 가지 기본 색상 외에 다른 색상을 만드는 것은 어렵습니다. 하나 이상의 색상을 보여주기 시작하면 매우 분명해집니다.0.01:1:0.010.01:0.01:1

밝은 흰색에 대한 감마 보정은 흰색이므로 이 방법은 어두운/검은색 배경에서만 작동합니다.

xrandr -q사용할 출력 ID를 찾는 데 사용됩니다 $OUTPUT. 예를 들어 내 노트북 ​​화면은 LVDS-1입니다.

답변3

플러그인을 지원하는 합성 창 관리자를 사용하는 경우 필요에 따라 화면 픽셀을 변경하는 플러그인을 만들 수 있습니다. 즉, 입력 픽셀의 밝기를 계산하고 결과를 황색으로 변조합니다(필요에 따라 감마 보정을 앞뒤로 적용). ).

해커 공격의 예입니다.상하 반전KDE 창 관리자 KWin의 효과가 이를 수행합니다. 이 핵은 단순히 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;
}

/usr/share/apps/kwin/shaders/1.40/invert.fragKDE4 KWin에서는 위에 제공된 코드에서 설치된 셰이더 파일을 간단히 바꿀 수 있습니다 . 안타깝게도 KDE5부터는 셰이더가 플러그인 바이너리에 Qt 리소스로 내장되어 있으므로 새 셰이더를 적용하려면 소스 트리에서 편집한 파일로 KWin을 다시 컴파일해야 합니다.texcoord0varyingTexCoords

효과가 단축키 조합을 통해 활성화되었을 때의 결과는 아래와 같습니다(전용 드라이버를 사용하여 KDE4 KWin, Geforce GTX 750Ti에서 테스트 nvidia). 마우스 커서는 일반적으로 창 관리자에 의해 렌더링되지 않으므로 변경되지 않은 상태로 유지되므로 다른 방법으로 변경하거나 다음과 같이 에뮬레이트해야 합니다.급등하다그것이 바로 일어난 일입니다.

실제 효과 스크린샷

답변4

우와! 터미널의 색상을 변경할 수는 있지만. 나는 당신이 데스크탑 경험을 회색조로 변환할 의도가 없다고 확신합니다.

즉, 여러 가지 움직이는 부분이 관련되어 있습니다. 가장 관련성이 높은 것은 터미널 에뮬레이터를 선택하는 것입니다. 예를 들어 xterm(FreeBSD) (리눅스) 프레젠테이션의 여러 측면을 수정할 수 있습니다. 검정색 배경(황색 단색)에 황색 텍스트를 찾는 경우. 이렇게 달성할 수 있습니다.

내 로그인 셸을 사용하여 데스크탑의 왼쪽 상단에 검정색 배경, 황색 텍스트 및 황색으로 깜박이는 블록 커서가 있는 87행 x 57열의 Xterm 창을 만듭니다.

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원하는 정확한 노란색(호박색) 색조를 얻을 수 있습니다. 또한 이러한 이스케이프 시퀀스를 다른 쉘 프롬프트에 적용할 수도 있습니다.

관련 정보