[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Få den "rigtige" editor ved fjern-login (og farve)




Andre må have oplevet problemet, så her kommer en løsning.

Opgaven er at du logger ind som en anden bruger, enten med ssh eller sudo. Dernæst udføre du en kommando som kalde en editor, så som "crontab -e" eller "git commit". Nogle gange sker der det at du får dén helt forkerte editor, og kun kan komme ud af den med Ctrl-Z og "killall <dum-editor>".

Løsningen er at få sat dit lokale environment op med dine favoritindstillinger, og så få dem "båret med over" når du skifter til en anden bruger eller server.

Din favoriteditor skal sættes i dit environment, sådan at når du kalder "crontab -e", så er det den rigtige. Variablen hedder af historiske (1975) årsager VISUAL, og den kan checke hvad den står til med kommandoen:
	echo $VISUAL

Her gætter jeg på at det nok var den rigtige, og hvis du kalder kommandoen:
	crontab -e
er det også hvad du forventer.

Hvis du får den forkerte editor, og i øvrigt bruger bash, kan det ordnes med kommandoerne:
	echo export VISUAL=pico >> ~/.bashrc
	. ~/.bashrc
(sidstnævnte er bare for at indlæse filen igen,
 ellers logud og logind)

Hvis du sidder med et GUI-miljø, så prøv lige denne:
	export VISUAL=kate
	crontab -e
Det er lidt fjollet at kalde et GUI-program når man i forvejen sidder ved en prompt, men man kan.

Værre er det når man logger ind remote på en fremmed server:
	ssh sslug@sslug
	crontab -e
...så får man den helt forkerte editor.

Man kan se problemet i sin $VISUAL variabel, og den kan man selvfølge bare sætte til fast at være "den rigtige", men da der er andre ignoranter der logger ind på samme konto, kan man ikke sætte en default (uden at blive meget upopulær).

Løsningen er at få dit private valg (det rigtige), med over på serveren. Der skal gøres to ting:
	1. Lokalt skal du sende VISUAL med over remote.
	2. Serveren skal acceptere at modtage det.

For at sende en variabel skal det angives med ssh's "SendEnv" kommando. Der er 3 måder at gøre det på. Globalt, lokalt og ad-hoc.

Globalt kan det tilføjes af root med
	echo SendEnv VISUAL >> /etc/ssh/sshd_config
(altså tilføj det i bunden af filen)

Lokalt er det:
	echo SendEnv VISUAL >> ~/.ssh/config
men har du flere options i din config, så tilføj linjen i toppen, så den bliver sendt med.

Ad-hoc er det fx:
	ssh -v -o "SendEnv VISUAL" sslug.dk

I den anden ende (remote) er det lidt værre, hvis ikke du selv er systemadministrator. Det skal rettes i filen /etc/ssh/sshd_config, og kun "bastard operator from hell" (BOFH) kan gøre det. Enten skal der tilføjes til linjen "^AccceptEnv" eller der skal tilføjes en linje mere der begynder med "AcceptEnv". Der må godt være mere end en linje med det tag:
	echo AcceptEnv VISUAL >> /etc/ssh/sshd_config
	/etc/init.d/ssh reload

Nu kan du så logge ind remote, og få den rigtige editor:
	ssh sslug@sslug
	echo $VISUAL

Hvis ikke du ser den rigtige editor efter sidste linje, så er det fordi den bliver sat til noget imens du logger ind. Check følgende filer remote:
	~/.bashrc
	/etc/environment
	/etc/profile
	/etc/skel/.bashrc
Hvis ikke det giver forklaringen, så login som root og led:
	grep -rIs VISUAL /etc

----- sudo -----

Du er nu logget ind remote og har den rigtige editor. Der bliver vist stor tillid til dig, og du kan lave nogle sudo kommandoer - men du får ikke den rigtige editor! Igen må du bede BOFH om en ændring. Bed "ham" logge ind og kører kommandoen:
	visudo
og tilføje/rette:
	Defaults        env_reset
	Defaults        env_keep="VISUAL"
(det er filen /etc/sudoers der rettes i)

Denne ændring skal du i øvrigt også have lavet på dit eget EDB-apparat, så login som root og øv dig på det, så du lyder overbevisende når du skal lokke BOFH til at gøre det samme.

------ farver ------

De fleste ser en tekstterminal med grøn tekst på sort baggrund, men der er dog undtagelser. Nogle kan godt lide "syntax highlight", og det kan da godt indrømmes at det kan hjælpe til finde fejl i strenge datastrukture.

Nogle GUI-editore er begyndt at sætte variablen COLORFGBG, alt efter hvilke farver man lige nu har i sin GUI-terminal. Programmet KDE Konsole gør det. Hvis man fx har hvid tekst på sort baggrund, så vil variablen have værdien:
	COLORFGBG=15;0
og hvis det er sort på hvid er det:
	COLORFGBG=0;15
Check selv ud hvad din variabel står til nu:
	echo $COLORFGBG

Nogle moderne editore, som kan vise farver, kender også denne variabel og sætter syntax highlight så den passer med.

Så det der skal rettes i din ~/.ssh/config er
	echo SendEnv VISUAL COLORFGBG >> ~/.ssh/config

Og på server-siden skal det selvfølgelig være
	echo AcceptEnv VISUAL COLORFGBG >> /etc/ssh/sshd_config
	/etc/init.d/ssh reload # ...ikke at forglemme

------ e-mail ------

I ovenstående er nævnt at man kan sende nogle variable med over remote. En jeg selv bruger når jeg logger ind på en fælles konto er
	EMAIL
Den bruges så ved git/svn/hg commit beskeder til automatisk at se hvem der foretog en ændring. Formålet er ikke at bashe den der lavede fejlen, men bare have en lille smule tracking på "hvem der gjorde hvad" og så kan vi alle lære af det, og vi får et bedre system med højere oppetid - og oppetid er jo den grundlæggende mening med livet!

/hans
--
Horsebakken 78, DK-2400 København NV


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2011-11-01, 02:01 CET [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *