Kolik trilobitu ma jeden trilobyte?

Linux hacks

Zde najdete par tipu, jak efektivne pouzivat Linux. Uvazte, ze tyto tipy jsou od cloveka, ktery ma pet 21" monitoru pripojenych k jednomu pocitaci, na nich zhruba 60-80 terminalu, firefox a nekolik xpdf. Zadne rotujici krychle, zadne pozadi (stejne neni videt), minimum klikacich programu ... tento navod se tyka prevazne terminalu.

synchronizace clipboardu mezi vice Xky

Fluxbox

Fluxbox je lightweight windowmanager, ktery beha i na pentiu 120 se 16MB RAM. Da se v nem nastavit pozadi (nejakym programem - asi sluzba xserveru), ma extra menu na leve, prostredni a prave tlacitko (coz nepouzivam), nema problemy s klavesovymi zkratkami a hlavne ma taby. Co je takovy tab? Predstavte si okno - treba xterm. Ma nejake dekorace (treba zadne) po stranach a dole a nahore ma listu s titulkem a tlacitky na minimalizaci, maximalizaci, zavreni a existenci na vsech plochach. Ted si otevrete druhe takove okno - treba xpdf. Jedno z nich chytnete mysi za listu prostrednim tlacitkem, odtahnete ho kamkoliv nad to druhe a pustte. Nahle mate jedno okno s jednou listou, ctyrmi tlacitky ... a cast s titulkem je rozdelena na pulky a v kazde je jeden z titulku. Pocet oken je asi neomezeny (nenarazil jsem na limity), akorat s rostoucim poctem se zmensuje viditelna cast titulku okna.

Prepinani jde nastavit na kliknuti mysi, nebo na najeti mysi (me oblibene, avsak pro neznale dost matouci - take pri tom jde porovnavat obsah dvou terminalu jako blinkmikroskopem - staci je dat vedle sebe a prejizdet mysi pres rozhranni na liste), pripadne klavesnici tab vlevo a tab vpravo a v novem fluxboxu (verse 1.1.1) i primym skokem na dany tab (podle cisla). Ovladani na najeti mysi je extremne rychle a ve spojeni s focusem okna na najeti mysi velice pohodlne.
Klavesove zkratky jdou definovat skoro na cokoliv, asi nejdulezitejsi je neco na pusteni xtermu - treba wokno+x.

cat .fluxbox/keys
...
# skok na konkretni tab - wokno a cislo
Mod4 1 :Tab 1
Mod4 2 :Tab 2
...
#otevrit terminal
Mod4 x :Exec xterm
...
#prepinani virutalnich ploch - alt a F1,F2,...
Mod1 F1 :Workspace 1
Mod1 F2 :Workspace 2
...

Fluxbox toho umi jeste vic, ale to nepouzivam, takze to nemuzu povazovat za duvod, proc je efektivni pouzivat fluxbox.

ClusterDuck

ClusterDuck jsem napsal, abych nahrazuje prepinac virtualnich ploch. Pri pouziti vice monitoru se prepnou vsechny virtualni plochy, coz mi nevyhovovalo. Takze pouziva Workspace 2 az 4 na ulozeni aplikaci a klavesami na numericke klavesnici (kterou bezne nepouzivam) je prepina na Workspace 1 na kazdem monitoru nezavisle.
Zatim funguje pro 3 monitory a 3 prepinane plochy (protoze na numericke klavesnici je k dispizici matice 3x3 klaves).
Aplikace je zcela experimentalni, zatim nema sanitizovane vstupy a pouzivate ji na vlastni nebezpeci.
ClusterDuck

Jak pripojit 3, nebo 4 monitory k laptopu Lenovo T540p

English version
Tento navod by mel fungovat pro vsechny pocitace se stejnou grafickou kartou.
#lspci
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor DRAM Controller (rev 06)
00:02.0 VGA compatible controller: Intel Corporation 4th Gen Core Processor Integrated Graphics Controller (rev 06)
...
Laptop sam ma nekolik grafickych vystupu a dockina dalsi. Zatim jsem neprisel na nejakou kombinaci, ktera by nefungovala, ale ani zdaleka jsem nevyzkousel vsechny. Napriklad funguje VGA vystup primo z laptopu a DVI s dockiny. Primo ke graficke karte jsou pripojit nanejvys dva monitory, pokud neni zadny pres DisplayPort a nanejvys tri pokud alespon jeden je pres DisplayPort. Chystate-li se pripojit jeden pres redukci z DP na neco jineho, tato redukce musi byt aktivni (velka, draha, napajena), nicmene to jsem nezkousel. Interni display je na DisplayPortu, takze k laptopu jdou pripojit nahodne dva monitory a stale vyuzivat interni display.
Dale popisu jen to, co mam vyzkousene, ale nenarazil jsem na nefunkcni kombinaci.

interni + VGA + HDMI na dockine


Verze Xserveru se lisi svym chovanim, takze popisu konfiguraci pro Fedoru 20 a Fedoru 24. Pro jine systemy budete mozna muset laborovat s utilitou xrandr.
F20: (doufam, ze jsem to z poznamek vytahl spravne, downgradovat se mi nechce)
#!/bin/bash
xrandr --output DP-1-3 --off
xrandr --output DP-1-2 --off
xrandr --auto
xrandr --output eDP-0 --left-of DP-1-2
xrandr --output DP-1-3 --left-of DP-1-2
Rozliseni monitoru neni treba uvadet, vzal si maximalni podporovane monitorem. V jednom pripade 1920x1080, ve druhem 1280x1024.
F24: xorg-server 1.18.4, xrandr program version 1.5.0, Server reports RandR version 1.5
#!/bin/bash
xrandr --output DP2-1 --off
xrandr --output DP2-2 --off
xrandr --output DP2-2 --mode 1920x1080 --right-of eDP1
xrandr --output DP2-1 --mode 1920x1080 --right-of DP2-2
Vystupy se prejmenovaly (kabely jsou zapojene stejne) a je nutne explicitne uvadet rozliseni, bez toho to nechodi.

interni + VGA + HDMI na dockine + USB


USB graficka karta Displaylink s chipem DL-165 (ve skutecnosti to neni cela graficka karta, ale jen kus pameti, dekompresor a to CRTC, na jehoz nepritomnost si xrandr stezuje, kdyz zkusite pripojit 3. monitor) funguje na F24 bez problemu. Na F20 se mi s ni akorat povedlo shodit Xserver.
Staci zapojit do karty monitor a pripojit ji do USB, detekuji se mozna rozliseni a pak uz jenom pustit (nebo pridat k predeslym prikazum pro F24):
xrandr --output DVI-I-1 --mode 1280x1024 --left-of eDP1
Karta prehraje i video v rozlisenim 1280x1024, ale nezkousel jsem zadne akcni sceny. Vsecha data (byt zakomprimovana) musi proteci USB 2.0, ktera je limitovana na 480 Mbit/s.

screen

Screen je prehistoricky UNIXovy program, ktery zvlada neuveritelne veci. Jeho hlavnim smyslem je umoznit mit na jednom terminalu vice virtualnich terminalu. Jednou jeho velmi pohodlnych vlastnosti je automaticky detach pri padu spojeni (hodi se na GPRS :-)). Staci nove ssh, screen -r a jsme presne tam, kde jsme skoncili.
V zakladnim nastaveni clovek nepozna, zda je ve screenu, nebo ne a navic ma zabranou klavesovou zkratku ctrl-a (skok na zacatek radky - lze ocenit zvlaste na notebooku, kde je home Fn+leva sipka a Fn je tak daleko, aby nesel zmacknout jednou rukou spolecne s sipkou a v te druhe ruce je zrovna caj ...). Terminaly se prepinaji Ctrl-a 0 az Ctrl-a 9 a dal uz to primo nejde (jen pres menu), novy se vytvari Ctrl-a c (jako create), zabiji Ctrl-a k (kill) a do posledne navstiveneho se lze vratit Ctrl-a Ctrl-a. Umyslny detach vyvolame Ctrl-a d a help je Ctrl-a ?.

Prvni, co jsem udelal bylo premapovani Ctrl-a na F1. Proc zrovna F1? Jednak funkcni klavesy vubec nepouzivam. Na nekolik z nich jsem si namapoval nejaka makra ve vimu, ale ani ta moc nepouzivam. V mc lze pouzit i esc-cislo a pro prepinani pracovnich ploch se pouziva nekolidujici Alt-F*. Druhak mi nestaci primy pristup na prvnich 10 terminalu, takze je logicke pokracovat dalsimi funkcnimi klavesami. F1-0 az F1-9, F2-0 az F2-9, F3-0 ...

cat ~/.screenrc
#F1 jako command key - zde se jmenuje k1
bindkey -k k1 command
escape ^~~
#hardstatusline - vidime jake mame terminaly (alespon prvnich par, ktere se vejdou na jeden radek) a kde jsme.
hardstatus alwayslastline
hardstatus string "%{= wk} %-w%{= bW} %n %t %{= wk}%+w %="
#vytvori sel2 na klavese F2
bindkey -k k2 command -c sel2
#vyselectuje 14. okno na F2-3 - ostatnich 10 az 80 (dle libosti) prikazu vygenerujeme analogicky treba smyckou for
bind -c sel2 3 select 14

Tim nam zbyva posledni problem tohoto reseni - podle delky titulku okna a velikoti terminalu jsou videt titulky zhruba prvnich 10-14ti oken a dal uz nic. Vyuzijme dalsi vlastnosti screenu - umi vice prihlaseni k jedne session:
screen -x
Otevreme si (treba na vedlejsim monitoru) svisly xterm (asi tak 10-20 sloupcu a potrebny pocet radek), v nem screen -x a F1-", coz zobrazi menu. Menu se updatuje okamzite, takze mame predstavu o tom, kde je co.

Titulek do screenu propasujeme escape sekvenci:
echo -ne "\033k$1\033\\" kterou se vyplati umistit do promptu tak, aby byl videt pracovni adresar (pokud mozno ne cela cesta - to je pak neprehledne).

S

S je muj skript na ssh. Nebavi me neustale vypisovat username, nebo se starat o to ve ktere jsem siti a jak se dostanu na kterou masinu. Navic sam nastavi titulek xtermu, nebo screenu. Nema konfiguracni soubor, ani nic takoveho, rekonfiguruje se zmenou skriptu ... a zatim neni dopsany.
Jeho smyslem je usetrit par klaves. Treba misto rucniho nastavovani titulku screenu/xtermu a psani 'ssh -X root@anothername.site.tld' staci 'S \#machine1'. Lenost je mocna carodejka.

cat ~/bin/S
#!/bin/bash

if echo "$1" | grep '@' > /dev/null; then
        SSH_USER="$( echo "$1" | sed 's/\(@\).*/\1/' )"
        SSH_MACHINE="$( echo "$1" | sed 's/.*@//' )"
else
        if echo "$1" | grep '^#' > /dev/null; then
                SSH_USER="root@"
                SSH_MACHINE="$( echo "$1" | sed 's/^#//' )"
        elif echo "$1" | grep '^1' > /dev/null; then
                SSH_USER="user1@"
                SSH_MACHINE="$( echo "$1" | sed 's/^1//' )"
        elif echo "$1" | grep '^2' > /dev/null; then
                SSH_USER="user2@"
                SSH_MACHINE="$( echo "$1" | sed 's/^2//' )"
        else
                SSH_USER=""
                SSH_MACHINE="$1"

        fi
fi

# some machines can't be reached from outside simply, or must be reached by differrent ways
# from differrent places

DEFAULT_IFACE="$(/sbin/route -n | grep '^0.0.0.0' | sed 's/.* \([^ ]*\) *$/\1/')"
echo "Default route is going to: $DEFAULT_IFACE interface."
IP="$(/sbin/ifconfig "$DEFAULT_IFACE"|grep 'inet addr:'|sed 's/.*inet addr:\([0-9.]*\).*/\1/')"

if [ "$DEFAULT_IFACE" = 'ppp0' ]; then
        OUTSIDE=1
fi

if [ "$DEFAULT_IFACE" = 'eth0' ]; then
        if echo "$IP"|grep '192.168.1.' >/dev/null; then
                NET1=1
        elif echo "$IP"|grep '10.0.0.' >/dev/null; then
                NET2=1
        elif echo "$IP"|grep '192.168.2.' >/dev/null; then
                NET3=1
        else
                OUTSIDE=1
        fi
fi

if [ "$SSH_MACHINE" = 'machine1' ]; then
        if [ "$OUTSIDE" = '1' ]; then
                SSH_MACHINE='anothername.site.tld'
        fi
        if [ "$NET3" = '1' ]; then
                SSH_MACHINE='anothername.site.tld'
        fi
fi

if [ "$SSH_MACHINE" = 'anothername.site.tld' ]; then
        if [ "$NET1" = '1' ]; then
                SSH_MACHINE='machine1'
        fi
fi

# what should be on screen or xterm descr

if echo "$SSH_USER" | grep '^root@' > /dev/null; then
        TITLE_USER="#"
elif echo "$SSH_USER" | grep '^user1@' > /dev/null; then
        TITLE_USER="1"
elif echo "$SSH_USER" | grep '^user2@' > /dev/null; then
        TITLE_USER="2"
else
        TITLE_USER="$SSH_USER"
fi

if [ "$TERM" = 'screen' ]; then
        echo -ne "\033k$TITLE_USER$SSH_MACHINE\033\\"
elif [ "$TERM" = 'xterm' ]; then
        echo -ne "\033]0;$TITLE_USER$SSH_MACHINE\007"
else
        echo "SSH: $TITLE_USER$SSH_MACHINE"
fi

echo "user:$SSH_USER, machine:$SSH_MACHINE, iface:$DEFAULT_IFACE, ip:$IP, title:$TITLE_USER"

ssh -X "$SSH_USER$SSH_MACHINE"
     

bc

bc je commandline kalkulacka, ktera pracuje s libovolnou presnosti (nastavuje se v promenne scale). Nicmene autori ji nevybavili "zbytecnymi" funkcemi, jako treba tangents (O.K. - to vi snad skoro kazdy, ze tan=sin/cos), nebo treba arcsin a arccos (a ty uz jsem z hlavy nedal). Takze jsem se rozhodl tyto funkce dodefinovat (ve stylu bc - kde sinus je s() a cosinus c(), takze as(), ac() a t()) a k nim jsem rovnou pridal i jejich varianty fungujici ve stupnich - tentokrat s obvyklymi mazvy. No a pi, dekadicky a dvojkovy logaritmus se take obcas hodi.

Tento soubor je mozno automaticky nahrat a vykonat pri kazdem spusteni bc, za pomoci aliasu:
alias bc='bc -l ~/bin/bc_lib'
Alias lze (v Debianu) vlozit rovnou do systemu
echo "alias bc='bc -l ~/bin/bc_lib'" >> ~/.bash_aliases
v ostatnich distribucich pripadne primo do ~/.bashrc.
define as (x) { return a(x/sqrt(1-x^2)); }
define ac (x) { return a(sqrt(1-x^2)/x); }
define t (x) { return s(x)/c(x); }
# ^^ the library for arcsin, arccos and tan in radians
#pi=3.141592653589793238462643
pi=4*a(1)

#goniometric functions in degrees
rad2deg=180/pi
define sin (x) { return s(x/rad2deg); }
define cos (x) { return c(x/rad2deg); }
define tan (x) { return t(x/rad2deg); }
define asin (x) { return as(x)*rad2deg; }
define acos (x) { return ac(x)*rad2deg; }
define atan (x) { return a(x)*rad2deg; }

#decadic and binary logarithm
define log (x) { return l(x)/l(10); }
define lb (x) { return l(x)/l(2); }

Pokracovani bude, az budu mit cas ho napsat :-).