Sok terminálos munka esetén nekem nagy segítséget jelent, hogy a terminálok színét be tudom állítani. Ezt eddig csak úgy tudtam megtenni, hogy a terminál programban létrehozok egy profilt, és ott állítom be a színeket.
Van rá bármilyen lehetőség, hogy valamilyen környezeti paraméteres varázslat segítségével ezt a .profile segítségével érjem el? Vagyis, ha egyszerűen csak belépek egy konzolon keresztül - legyen az ssh, vagy akár egy helyi terminál -, akkor a munkaterület színe (háttér/betűk) egyedire változzon? Van erre lehetőség?
- 491 megtekintés
Hozzászólások
cat .bashrc
# /etc/bashrc
export PATH=~/bin:~/.local/bin:$PATH
PS1="\[\033[01;32m\]\u@\[\033[1;96m\]\\h:\[\033[1;93m\]\w \$ \[\033[00m\]"
export PS1
- A hozzászóláshoz be kell jelentkezni
Köszönöm, egyelőre ez is több, mint a semmi, ez már segít valamennyire.
- A hozzászóláshoz be kell jelentkezni
Nálam kétféle színezés van: éles szerver gép és minden más
- A hozzászóláshoz be kell jelentkezni
Igen, Bash-ban a promptra ez így működik. Egy dologra felhívnám a figyelmet, hogy a színkódokat nem elég szabályosan \033[xx;yym vagy \e[zzm formában írni, hanem nagyon kell figyelni, hogy a \[ és \] zárócímkék (escape-elt szögletes zárójelek) közé is be KELL tenni. Ez csak azért fontos, mert látszólag azok nélkül is működik, de mikor az ember hosszabb parancssort szerkeszt, akkor előjöhetnek fura bugok, maradványkarakterek a prompt után, mert a shell rosszul fogja számítani, hogy milyen hosszan nyúlik be a PS prompt a parancssorba. A zárócímkék jelzik a Bash-nek, hogy valójában ezek az escape szekvenciák, színkódok nem nyomtatandó karakterek, és tényleges kiírásban 0 karakternyi helyet foglalnak el. Gondolom ez nem sok embernek újdonság itt, de én pl. most szoptam vele nemrég, és nagyon nehéz volt debuggolni, hogy mi okozza, könnyű rosszul kimásolni, egy karaktert kifelejteni. Majdnem két órát szenvedtem vele az egyik gépemen, mindent végigpróbáltam, readline/inputrc beállítások, bashrc, vi mód, saját függvények és aliasok, mire meglett, hogy a rosszul színkódozott prompt okozza.
Sajnos a shell az ilyen, haladó eszköz, nem találják ki a felhasználó helyett nagy techcégek, hogy mire gondolt a költő, hülyebiztos legyen. Elég egy karaktert félreütni, már nem lesz jó valami. Ilyenkor sok kezdőbb felhasználó elkönyveli, hogy ×4r4linux, sose lesz desktop éve, bugos, ingyen húsnak híg a leve, inkább Windows, közben meg sokszor szimplán user error, rossz beállítás, irreális default beállítás out of the box, és csak meg kéne tanulni rendbe tenni, hogy jó legyen.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni
A terminálok színe alatt mit értesz? A promptot?
- A hozzászóláshoz be kell jelentkezni
(háttér/betűk)
Amennyire tudom a konzol hátterét maga a terminál program állítja, mint ahogy a fontot is. a promptban megjelenített karakterszíneket elvileg lehet .profile változóból állítani. Az egyéb színeket viszont maguk a programok állítják.
Pl:
alias ls='ls --color=auto'
Azt nem tudom, hogy van-e olyan terminál program, ami képes környezeti változókból felvenni beállításokat, mert akkor elvileg tudod konfigurálni (az megint jó kérdés, hogy ezt pl dinamikusan már futás közben is felveszi-e, ha pl ssh-t nyitva a remote oldalon belő/felülcsap egy környezeti változót).
szerk: elvileg az alap terminálra is lehet állítgatni pár dolgot: https://opensource.com/article/19/9/linux-terminal-colors
- A hozzászóláshoz be kell jelentkezni
Köszönöm, ez egészen jól néz ki!
- A hozzászóláshoz be kell jelentkezni
(háttér/betűk)
Jogos :)
- A hozzászóláshoz be kell jelentkezni
Ha a palettára gondolsz, vagyis hogy a fehér az a fehér milyen árnyalata, a piros az a piros milyen árnyalata pontosan, akkor az OSC 4, 10, 11 escape szekvenciákat keresed:
printf '\e]10;#abcdef\e\\' # alapértelmezett előtér
printf '\e]11;#123456\e\\' # alapértelmezett háttér
printf '\e]4;0;#102030\e\\' # első paletta szín (általában fekete)
printf '\e]4;1;#f01010\e\\' # második paletta szín (általában piros)
# stb.
printf '\e]110;#abcdef\e\\' # előtér visszaállítása
# stb.
Teljes lista a ctlseqs.txt fájlban (ráguglizol) az Operating System Commands fejezet alatt.
Nem mindegyik terminál támogatja.
- A hozzászóláshoz be kell jelentkezni
majd a termcap/terminfo alapjan amit a kliens beallit, eldonti h mit tamogat.
- A hozzászóláshoz be kell jelentkezni
Én is frászt kapok a bevarrt terminál escape szekvenciákról. A mai monokultúrális világban már talán működnek, régebben viszont rengeteg gondot okoztak. A pontos színbeállító szekvenciákat a tput segítségével illik előállítani, pl. tput setaf 4 / tput setf 4 illetve tput setab 4 / tput setab 4 :-)
PS1="[`tput setaf 4`\\u`tput setaf 0`@\\h \\W]\\$ "
- A hozzászóláshoz be kell jelentkezni
Lehet így is csinálni. Előnye, hogy a tput figyelembe veszi a beállított terminál képességeit, és annak megfelelően alakít át escape szekvenciákra, a hátránya, hogy előfordulhat olyan rendszer, ahol nincs fent terminfo/tput. Én simán escape szekvenciákat használok, minden támogatja ma már, mostanság minden tisztességes terminál egyenesen truecolor meg unicode-képes. tty az nem, de ott sem okoz sok zavart, csak a színek nem lesznek olyan szépek.
zsh-nél még könnyebb PS1-et színezni, mivel kulturáltabb tag-rendszere van.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni
A setaf / setab kiválasztja a (például) 4-es indexű színt. Amit én mutattam, az beállítja, hogy a (például) 4-es indexű szín pontosan milyen RGB legyen. A kettő nem ugyanaz.
- A hozzászóláshoz be kell jelentkezni
A terminfo koncepciója millió sebből vérzik, ebbe most nem mennék bele.
Az általam fent mutatott escape sequenciákból a 4/104 benne van, a 10/110, 11/111 nincs. (A setaf / setab az más.)
Na de a "benne van" az amolyan félig van benne, merthogy ahelyett, hogy a kliens tudna mindent (nevezetesen a pontos escape szekvenciát belekódolnánk), ahelyett az információ egy része (a "körítés") a terminfo-ból jön, másik része (nevezetesen hogy az első paraméter a szín indexe, ami konvenció szerint 0=fekete, 1=piros stb., valamint hogy a következő három paraméter az rendre az R, G, B színérték a teljesen önkényes és szokatlan 0..999 skálán), az nincs benne a terminfo-ban, azt a kliensnek kell tudnia hardcode-oltan. Nem látom, hogy a tudás, felelősség ilyen szintű szétvágása miért lenne jobb, mint a teljes tudást a kliensbe belekódolni. Vagy akkor oldja meg a terminfo, hogy ott legyen az egész.
- A hozzászóláshoz be kell jelentkezni
Ez így nagyon pontatlan. Terminálon mit értesz? tty konzol vagy grafikus terminál emulátor? Ha az utóbbi, akkor pontosan mi a neve, xterm, gnome-terminal, xfce4-terminal, alacritty vagy micsoda?
Ez a szín se világos, hogy általában minden színt akarsz átállítani, hogy egy egységes színsémát elérj (pl. nordic, vim solarized, gruvbox, dracula, monokai, stb.), vagy csak azt szeretnéd, hogy az egyes parancsoknak ne monokróm, hanem színes kimenete legyen? Mert ez utóbbi már részben az interaktív shelleden is múlhat, és megint előkerülnek olyan kérdések, hogy akkor milyen shell ez pontosan, Bash, zsh, fish. dash, ksh? Ennek függvénye, hogy milyen rc vagy profile fájlt milyen néven, hogy kell megszerkeszteni, source-olni.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni
Itt volt egy hasonló kérdésem, de nekem inkább egy vizuálisabb megjelenítés kellett a prompthoz:
(nálam színes ez is.)
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Szerintem a kolléga mást akar, de nem értem pontosan mit. Ahogy én értelmezem a jósgömböm segítségével, az egységes színtémát akarja állítani, de egyszerre több programban, és olyat nem lehet, legalábbis úgy, ahogy ő akarja. tty-ban nem lehet, grafikus terminálemulátorban igen, de ott meg terminálprogramonként változik, hogy a színtémát hogyan kell neki bekonfigurálni, van, amelyikben GUI-ban kell létrehozni és testre szabni a profilt (gnome-terminal, xfce4-terminal, lxterminal), van, amelyik az .Xresources fájlt nézi (pl. xterm, urxvt), van, amelyiknek a saját konfigfájlában (Alactritty, Kitty, Termite, stb.), a saját szintaxisával kell megadni, definiálni a színeket, ez a legjellemzőbb. Van, ahol fordítás előtt a forráskódban kell megadni (suckless-féle simple terminál, avagy rövidebb nevén st). Már csak azért sem lehet egységesen megadni, mert a konzol, meg a különféle terminálok grafikus képességei sem egyeznek, eleve nem egyformán támogatnak x féle színt, pl. a tty jellemően csak 16 szabvány (jellemzően a VGA, EGA, CGA, MDA szabványból hozott) színt tud, a régebbi grafikus terminálemulátorok 256-ot, a modernek 16,7 milliót (rrggbb 24 bit) vagy 4,2 milliárdot (rrggbbaa 32 bit = 24 bit + 8 bit alpha).
Ajánlom a kolléga figyelmébe a terminal.sexy nevű oldalt, ott lehet színtémákat betölteni, választani, és többféle terminál konfigformátumában elmenteni, de ez sem az az általános megoldás, amit ő keres. A unixpornos és youtube-os ricer-ök általában ezzel dolgoznak, de vannak kivételek. Ez is olyan, hogy mindenki mást használ, máshogy konfigurálja, ahogy más disztrót, más WM-et, stb. preferál.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni
Nekem sem teljesen világos, de úgy gondolom, hogy az én hasonló igényem jelentkezik nála is. Pl. a tesztrendszerek console-ján a betűszín kék legyen, a semleges egyéb rendszerekén pl. zöld és az éles rendszereken pedig pl. narancssárga. Esetleg a prompt színe legyen eltérő. Egy kicsit meg is jött a kedvem hozzá, így várom a válaszokat.... :)
- A hozzászóláshoz be kell jelentkezni
Ehhez meg elég a login shelled rc-jében betenni egy ANSI színkódot echo-val vagy fprint-tel, az mindenhol működik. A PS1 prompt is megoldható ugyanígy, ugyanitt, ahogy már fentebb írtuk, sőt, a kettő összevonható, hogy a parancssor átfestését okozó színkódot maga a prompt nyomtassa maga után. De ezek inkább csak kiegészítő trükkök, nem komplett színtéma. Grafikus SSH kliensek is tudnak ilyet, konkrét SSH hosthoz lehet profilokat menteni, és azzal együtt indítani a kapcsolatot, egyedi beállításokkal, színekkel.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni