defaults: vartotojo nustatymų valdymas
Kiekviena sistema turi savo “skrynią”, kurioje laiko visus savo ir programų nustatymus. Kai kurie iš šitų nustatymų yra prieinami vartotojui per GUI, dauguma jų — paslėpti. Windows turi savo registrą, UNIX sistemos turi vim bei /etc katalogą, o Mac OS X turi defaults. Taip, žinau, kad Mac OS X yra sukurta UNIX pagrindu ir taip pat turi vim bei /etc katalogą (tiksliau – simbolinę nuorodą į /private/etc), tačiau šis straipsnis apie nustatymų keitimą teisingu būdu ™.
defaults yra pagalbinė programa (a.k.a. utility), leidžianti valdyti bet kokius sistemos ir įdiegtų programų nustatymus, kurie yra neprieinami per System Preferences… ar Preferences… valdymo skydelius. Tai yra terminalinė programa, todėl ji grafinės vartotojo sąsajos neturi (na, nebent yra trečios šalies sukurta programa, kuri “apvelka” defaults).
Atgal į pirmą klasę
Kiekviena programa Mac OS X sistemoje turi savo vardinę sritį (a.k.a. domain), kurioje talpina savo visus nustatymus (tiek paslėptus, tiek prieinamus per Preferences… valdymo skydelį). Bendras vardinės srities vardo sudarymas yra sekantis: tld.kompanija.programa. Atrodo atvirkščiai negu interneto domenas, tačiau viskas čia yra gerai. Keletas Mac OS X vardinių sričių yra:
com.apple.Finder– Finder programos nustatymaicom.apple.Dock– Dock nustatymaicom.apple.screencapture– ekranvaizdžių kūrimo nustatymaicom.plasq.skitch– Skitch nustatymaicom.macromates.textmate– Textmate redaktoriaus nustatymai
Visi nustatymai yra laikomi sąrašų pavidalu. Sąrašo elementas yra paprasta rakto-reikšmės pora. Raktas yra paprasta simbolių eilutė, kitaip tariant – nustatymo pavadinimas. Reikšmė gali būti kelių tipų:
- Paprasta simbolių eilutė (a.k.a. frazė ar žodis);
- Skaitmuo ar skaičius (tiek sveikas, tiek trupmeninis);
- Dvejetainiai duomenys (nustatymai taip pat gali talpinti vaizdą ar garsą);
- Masyvas (to pačio tipo reikšmių sąrašas be raktų);
- Sąrašas (taip, sąrašas gali būti sąraše). Sąrašų talpinimo hierarchija yra begalinė (metaforiškai, aišku);
defaults valdo tuos nustatymus manipuliuodama sąrašais arba rakto-reikšmės poromis. Taip pat ji sugeba pateikti vardinių sričių sąrašą. Gal užteks teorijos. Pradėsime daryti kažką praktiško. Pasileisk terminalą ir joje įvesk komandą:
$ defaults
ir spausk [Enter] (vėliau to jau nebepriminsiu). Prieš akis pamatysi bendrą programos naudojimo instrukciją. Naudojimas ganėtinai paprastas: defaults veiksmas vardinė.sritis nustatymas reikšmė. Atitinkamai nuo naudojimo situacijos ne visi parametrai yra privalomi.
Mokomės skaityti ir ieškoti
Tam, kad rašyti kokius nors nustatymus – reikia iš pradžių žinoti kokie tie nustatymai yra. Kitaip tariant – reikia išmokti juos skaityti. Ir atitinkamai, tam, kad skaityti kokius nors nustatymus reikia žinoti kokioje vardinėje srityje tai reikia daryti. Aš, aišku, nurodžiau kelias vardines sritis tau šiek tiek anksčiau, tačiau išmokti skaityti visas vardines sritis taip pat svarbu. Taigi, terminalo lange įrašyk:
$ defaults domains
Tau išves ilgą vardinių sričių, atskirtų kableliais, sąrašą. Išsirink vieną (aš pasirinkau com.apple.Finder demonstracijos sumetimais). Tada rašyk:
$ defaults read tavo.pasirinkta.vardinė.sritis
Ekrano terminale perbėgs daug eilučių su įvairiausiais nustatymais bei jų reikšmėmis. 99% jų bus tau, kaip ir man, nesuprantami, tačiau mes susikoncentruosime ties tais, kuriuos mes suprantame. Tarkim, tu jau suradai kokį nors “suprantamą” nustatymą. Dabar tam, kad jį perskaitytum užtenka parašyti (aš rašysiu pagal savo parinktą vardinę sritį):
$ defaults read com.apple.Finder AllowCutForItems
Ir tau terminale bus išvesta to nustatymo reikšmė. Mano atveju tai yra nustatymas, kuris nurodo ar reikia Finder kontekstiniame meniu išvesti “Cut” meniu punktą, kuris iškerpa pažymėtas bylas ar katalogus iš karto į šiukšliadėžę (a.k.a. juos ištrina). Nuo kažkurio ankstesnio eksperimentavimo su nustatymais, pas mane ši reikšmė yra “true” (a.k.a. įjungta).
Aišku, gali būti tokių situacijų, kai tu nežinosi ką tiksliai reikia skaityti, o skaityti viską iš eilės bus nuobodu ir nenaudinga. Tokioje situacijoje pravers paieška. Viskas paprasčiau negu paprasta. Tiesa, paieška sukurta taip, kad tu privalai pakankamai tiksliai žinoti ko ieškai, kitu atveju gausis tas pats, kas ir visų nustatymų nuskaitymas. Paeiška vykdoma taip:
$ defaults find frazė
Po šios komandos defaults programa atliks paiešką visose vardinėse srityse ir visuose laikomose nustatymuose bei pateiks viską, kas savyje turi nurodytą frazę. Dėmesio: jeigu nustatymų rakte bus nurodyta tavo ieškoma frazė, tai kartu bus išvesta ir rakto reikšmė (kuri gali būti kelių lygių didelis sąrašas).
Kadangi išmokai skaityti ir ieškoti, dabar pats laikas prieiti prie įdomiausios dalies – rašymo.
Mokomės rašyti
Rašyti nustatymus yra visiškai paprasta. Tereikia nurodyti kokioje vardinėje srityje kokį parametrą norite keisti ir, savaime aišku, to parametro reikšmę. Priklausomai nuo parametro tipo atitinkamai gali kisti ir parametro reikšmės pateikimas. Tęsiant ankstesnį pokalbį apie skaitymą, mano situacijoje išrinkto parametro reikšmės keitimas atrodytų šitaip:
$ defaults write com.apple.Finder AllowCutForItems false
Tam, kad nustatymas pradėtų “veikti” man reikia perkrauti Finder programą, taigi po to terminale rašau:
$ killall Finder
Ir voilà! Kontekstinio meniu punkto “Cut” nebėra. Paprastų programų parametrų keitimus patartina atlikti tada, kai programa nėra paleista, kadangi programos veikimas gali “perrašyti” tavo keičiamą parametrą ir efektas liks nepastebėtas. Jeigu tu esi visiškai įsitikinęs, kad tavo programa parametro neperrašys, tau vis viena teks ją perleisti, kad pakrovos metu nuskaitytų naują parametro reikšmę.
Vietoje epilogo
Dabar tu žinai dar vieną būdą, kaip galima manipuliutoi sistemos bei programų parametrais. Mano nuomone, tokiu būdu galima keisti įdomiausius sistemos veikimo kampelius. Pradedant tokiais, ar darant lango ekranvaizdį reikia įtraukti šešėlį, baigiant tuo ar reikia rodyti dvigubas rodykles abiejuose šliaužties juostos (a.k.a. scrollbar) galuose.
Resursai
Ruošiant šį straipsnį nebuvo suvalgytas nė vienas obuolys.
Svajojai turėti savo oro uostą? Aptarnauti keleivius bei lėktuvus?
Visą laiką pasiklysti tarp pačių įvairiausių svorių, valiutų, ilgių galybės?
Nori savo rodomas skaidres (nesvarbu kam: draugams ar žiūrovams konferencijoje) patogiau rodyti, nespaudydamas mygtukų klaviatūroje?
Komentarai