Можно ли изменить мой дисплей на желтый монохромный?

Если вам нужно контролировать, где именно вводимый аргумент вставляется в вашу командную строку, или если вам нужно повторить его несколько раз, вы можете использовать xargs -I{}. ПРИМЕР #1

Создать пустую структуру папок в another_folder, которая отражает подпапки в текущем каталоге:

    ls -1d./*/ | xargs -I{} mkdir another_folder/{}
ПРИМЕР #2

Применить операцию к списку файлов, полученному из стандартного ввода, в этом случае сделать копию каждого .htmlфайла, добавив расширение .bak:

    find. -iname "*.html" | xargs -I{} cp {} {}.bak

Из справочной страницыxargsдля MacOS/BSD:

 -I replstr
         Execute utility for each input line, replacing one or more occurrences of
         replstr in up to replacements (or 5 if no -R flag is specified) arguments
         to utility with the entire line of input.  The resulting arguments, after
         replacement is done, will not be allowed to grow beyond 255 bytes; this is
         implemented by concatenating as much of the argument containing replstr as
         possible, to the constructed arguments to utility, up to 255 bytes.  The
         255 byte limit does not apply to arguments to utility which do not contain
         replstr, and furthermore, no replacement will be done on utility itself.
         Implies -x.

Linuxxargsсправочная страница:

   -I replace-str
          Replace  occurrences of replace-str in the initial-
          arguments with names read from standard input.  Al‐
          so,  unquoted  blanks do not terminate input items;
          instead the separator  is  the  newline  character.
          Implies -x and -L 1.

7
24.06.2019, 14:42
4 ответа

(Это относится только к 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для связи.)

7
27.01.2020, 20:18

Ура! Хотя возможно изменить цвет вашего терминала. Я почти уверен, что вы не собираетесь преобразовывать свой рабочий стол в оттенки серого.

Тем не менее, здесь задействовано несколько движущихся частей. Наиболее важным из них является выбранный вами эмулятор терминала. Например,xterm(FreeBSD)(Linux)позволяет модифицировать многие аспекты представления. Если вы искали Янтарный текст на черном фоне (Янтарный монохромный ). Вы можете сделать это таким образом,

Создайте окно Xterm 87 строк на 57 столбцов в верхнем левом -углу моего рабочего стола с черным фоном, с желтым текстом, используя мою оболочку входа в систему и янтарный мигающий блочный курсор

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, чтобы получить точный оттенок желтого (Янтарного ), который вы ищете. Вы также можете применить эти управляющие последовательности к любому другому приглашению оболочки.

-1
27.01.2020, 20:18

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, чтобы найти идентификатор вывода, который будет использоваться для $OUTPUT; экран моего ноутбука, например, LVDS -1.

3
27.01.2020, 20:18

Если вы используете композитный оконный менеджер, поддерживающий плагины, вы, скорее всего, сможете создать плагин, который будет изменять пиксели экрана по вашему желанию, т. е. вычислять яркость входного пикселя и модулировать результат янтарным цветом (, применяя гамма-коррекцию. вперед и назад по мере необходимости ).

Вот пример взлома эффекта Invert в оконном менеджере KDE, KWin, для достижения этой цели. Этот хак состоит в простой замене шейдера эффекта Invert, расположенного в исходном дереве 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(, заменив texcoord0в приведенном выше коде наvaryingTexCoords). К сожалению, начиная с KDE5, шейдер встроен в двоичный файл плагина как ресурс Qt, поэтому вам придется перекомпилировать KWin с файлом, отредактированным в дереве исходного кода, чтобы применить новый шейдер.

Результат выглядит так, как показано на снимке экрана ниже, когда эффект активируется комбинацией клавиш быстрого доступа (, проверенной на KDE4 KWin, на Geforce GTX 750Ti с проприетарным nvidiaдрайвером ). Обратите внимание, что курсор мыши остается неизменным, поскольку обычно он отображается не оконным менеджером, поэтому его следует изменить другим способом или смоделировать, как это делает эффект Масштаб .

screenshot of the effect in action

2
14.02.2020, 22:00

Теги

Похожие вопросы