Ist es möglich, mein Display auf Bernstein-Monochrom umzustellen?

9

Ich weiß, das klingt wirklich dumm, und ich habe nicht vor, so viel zu verwenden, aber gibt es eine Möglichkeit mit xrandroder etwas Ähnlichem, mein Display so zu gestalten, dass es Graustufen entspricht, aber eine Farbe anstelle von Grau verwendet? Ich denke, es wäre ein wirklich cooler Effekt für einige Anwendungen.

Anzeigename
quelle

Antworten:

6

(Dies betrifft nur X11, nicht Wayland oder andere Display-Management-Systeme. Einige dieser Techniken können mit anderen Tools angewendet werden, z. B. den Eingabehilfen von GNOME Shell .)

Ich kann mir zwei Möglichkeiten vorstellen, um eine gelbe Anzeige zu erhalten: Einfügen eines Compositing-Plugins, das alle Farben korrigiert, und Erstellen eines Farbprofils, das alle Farben auf ein gelbes Äquivalent korrigiert. Beide sind wahrscheinlich mit mehr Aufwand verbunden als sie wert sind (abgesehen von der Lernseite der Dinge).

Sie können eine gute Annäherung für Primärfarbanzeigen erhalten, indem Sie das Gamma pro Kanal manipulieren, wie in der Antwort von sigvei erläutert . xcalibkann auch Zugriff darauf gewähren und ermöglicht die direkte Steuerung von Helligkeit und Kontrast sowie die Angabe des Gammawertes:

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

führt zu einer grünen Anzeige. Helligkeit und Kontrast werden auf die Gammarampen angewendet, sodass xrandrSie dieselben Ergebnisse erzielen können.

Es ist möglich, die Gammarampen noch feiner zu steuern, aber das erlaubt Ihnen sowieso nicht, alles auf Bernsteinfarben abzubilden. Sie können Kanäle auf bestimmte Bereiche „klemmen“, sodass beispielsweise bei einem hellen Rot etwas Grün eingeführt wird und somit bernsteinfarbener erscheint, dann jedoch dunkle Rottöne grün erscheinen ...

Der folgende Code zeigt, wie Sie vorgehen müssen (ohne Fehlerbehandlung):

#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);
}

(Sie müssen -lX11 -lXxf86vmverlinken.)

Stephen Kitt
quelle
Sehr cool! Ich habe den Befehl xcalib noch nicht ausprobiert, nur weil ich ihn nicht installiert habe, aber das Programm c ist ziemlich ordentlich. Wie gesagt, ich habe nicht wirklich vor, dass mein Display ständig eine bestimmte Farbe hat, aber ich schätze es, etwas darüber zu lernen. Vielen Dank!
Anzeigename
3

xrandr --output $OUTPUT --gamma 1:0.01:0.01 gibt Ihnen ein fast monochromes Rot-auf-Schwarz.

Das Triplett von Zahlen sind RGB-Werte für die Gammakorrektur, getrennt durch: im Bereich von 0-1. Ersetzen Sie 1:0.01:0.01durch 0.01:1:0.01für grün und 0.01:0.01:1für blau. Es ist schwer, eine andere Farbe als diese drei Grundfarben herzustellen. Es wird sehr gut sichtbar, wenn Sie mehr als eine Farbe durchlassen.

Diese Methode funktioniert nur mit dunklen / schwarzen Hintergründen, da die Gammakorrektur von hellem Weiß nur weiß ist.

Verwenden Sie xrandr -qdiese Option , um die Ausgabe-ID zu finden, für die verwendet werden soll $OUTPUT. Mein Laptop-Bildschirm ist zum Beispiel LVDS-1.

Sigvei
quelle
Sehen Sie immer noch weißen Hintergrund auf dieser Seite.
Brian Haak
0

Wenn Sie einen Compositing-Fenstermanager verwenden, der Plugins unterstützt, können Sie wahrscheinlich ein Plugin erstellen, das die Bildschirmpixel nach Ihren Wünschen ändert, dh die Luminanz des Eingangspixels berechnet und das Ergebnis mit gelber Farbe moduliert (Gammakorrektur nach Bedarf hin und her anwenden) ).

Hier ist ein Beispiel für einen Hack auf den Invert- Effekt im KDE-Fenstermanager KWin, um dies zu erreichen. Dieser Hack besteht darin, einfach den Shader des Invert-Effekts im KWin-Quellbaum unter effects/invert/data/1.40/invert.frag(vorausgesetzt, Ihre GPU kann GLSL 1.40 ausführen) durch benutzerdefinierten Code zu ersetzen :

#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;
}

In KDE4 KWin können Sie einfach die installierte Shader-Datei ersetzen /usr/share/apps/kwin/shaders/1.40/invert.frag(nachdem Sie texcoord0den oben angegebenen Code durch ersetzt haben varyingTexCoords). Da KDE5 leider als Qt-Ressource in die Plugin-Binärdatei integriert ist, müssen Sie KWin mit der im Quellbaum bearbeiteten Datei neu kompilieren, damit der neue Shader angewendet werden kann.

Das Ergebnis sieht so aus, als ob der folgende Screenshot zeigt, wann der Effekt durch die Tastenkombination aktiviert wird (getestet auf KDE4 KWin, auf Geforce GTX 750Ti mit proprietärem nvidiaTreiber). Beachten Sie, dass der Mauszeiger unverändert bleibt, da er normalerweise nicht vom Fenstermanager gerendert wird. Daher sollte er auf andere Weise geändert oder wie der Zoomeffekt simuliert werden .

Screenshot des Effekts in Aktion

Ruslan
quelle
-1

Wütend! Während es möglich ist, die Farbe Ihres Terminals zu ändern. Ich bin mir ziemlich sicher, dass Sie nicht beabsichtigen, Ihre Desktop-Erfahrung in Graustufen umzuwandeln.

Das heißt, hier sind ein paar bewegliche Teile beteiligt. Am relevantesten ist der von Ihnen gewählte Terminalemutator. Zum Beispiel xterm( FreeBSD ) ( Linux ) ermöglicht die Änderung vieler Aspekte der Präsentation. Wenn Sie nach Bernsteintext auf schwarzem Hintergrund (Bernsteinmonochrom) suchen. Sie könnten es auf diese Weise erreichen,

Erstellen Sie ein Xterm-Fenster mit 87 Zeilen mal 57 Spalten in der oberen linken Ecke meines Desktops mit einem schwarzen Hintergrund, gelbem Text, meiner Anmeldeshell und einem gelb blinkenden Blockcursor

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

Sie können sogar die Farbe des Zeigers ändern -ms color

HINWEIS Ich habe die Farbe Gold gewählt, da sie der tatsächlichen Farbe am nächsten kommt, an die sich mein monochromer Amber-Monitor erinnert. Alle verfügbaren Farben finden Sie in der X11-Farbtabelle

Apropos Login-Shells; Ein weiterer Einflussfaktor ist die von Ihnen gewählte Shell. Meins ist (t) csh , und wenn ich damit vertraut bin, werde ich ein weiteres Beispiel dafür liefern;

Hier ist der relevante Auszug aus meinem .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 = "%#"

Dadurch wird effektiv eine gelbe Eingabeaufforderung auf schwarzem Hintergrund angezeigt. Sie können die ANSIEscape-Sequenz anpassen , um genau den gewünschten Gelbton (Bernstein) zu erhalten. Sie können diese Escape-Sequenzen auch auf jede andere Shell-Eingabeaufforderung anwenden.

jemand
quelle