Ընտրացանկի բացակայող գրառումները և անհետացող նախապատվությունները շտկվում են նույն ռեֆլեքսով, և դրանք անկապ խնդիրներ են։ Մեկը աշխատասեղանի ինտեգրումն է, մյուսը՝ հավելվածի վիճակը, և նոր պատկերակն ինքնին ոչ մեկը չի փոխում։ Դրանք իրարից բաժանելը մեկ փորձ է պահանջում և բացատրում է այս թեմայի շուրջ մարդկանց շփոթության մեծ մասը։ Գործարկիչը մեկնարկում է ծրագիր, իսկ ծրագիրն ինքն է որոշում, թե ինչ հիշել։

Երկու աշխատանք, որոնք միայն մեկի են նման

Աշխատասեղանի ինտեգրումը նշանակում է, որ միջավայրը կարող է գտնել կատարվող ֆայլ, ներկայացնել անուն և պատկերակ և փոխանցել ճիշտ արգումենտները։ Հավելվածի վիճակը նշանակում է, որ ծրագիրը պրոֆիլ գրում է տևական տեղում և կրկին կարդում այն հաջորդ մեկնարկին։ Ոչ մեկը չի ենթադրում մյուսին, և դրա համար աշխատող դյուրանցումը կարող է գործարկել հաճախորդ, որը մոռացել է ամեն ինչ։

Փոխեք մեկ անվնաս ցուցադրման նախապատվություն հավելվածի սեփական ղեկավարման տարրերով, ապա փակեք և նույն ձևով նորից բացեք այն։ Եթե նախապատվությունը վերադառնա, պահպանումը աշխատում է, և մնացած բողոքը պատուհանը գտնելու մասին է, ոչ թե տվյալների պահպանման։ Եթե այն անհետանա, դյուրանցումը շեղում է, և իսկական հարցն այն է, թե որտեղ է այդ գործընթացը պահում իր ֆայլերը։ Ստուգեք մեկ նախապատվություն միաժամանակ, որովհետև գաղտնաբառ նորից պահանջող հաճախորդը գուցե գաղտնիք է պաշտպանում, այլ ոչ թե կորցնում կազմաձև։

Համեմատեք մեկնարկի մուտքերը նախքան վերատեղադրումը

Սկսեք աշխատասեղանի գրառումից և կարդացեք, թե ինչ է այն իրականում անում, որովհետև ընտրացանկից մեկնարկը ավտոմատ կերպով նույն գործընթացային միջավայրը չէ, ինչ տերմինալից մեկնարկը։ Կարևոր ստեղները Exec, Path և անուղղակիորեն այն միջավայրն են, որը տրամադրում է նստաշրջանը։ Exec -ում փաթաթող սկրիպտը կարող է սահմանել փոփոխական, փոխել թղթապանակը կամ կանչել արտոնյալ օգնական, որը ընտրացանկը երբեք չի ցուցադրում։ Վերատեղադրումը փոխարինում է ֆայլեր, որոնք ծրագիրն արդեն ուներ, և դա հազվադեպ է այն փոփոխականը, որը փոխվել է։

grep -h '^Exec=' ~/.local/share/applications/*.desktop
desktop-file-validate ~/.local/share/applications/client.desktop

Նայեք ~/.local/share/applications -ում գտնվող ֆայլին ավելի շուտ, քան /usr/share/applications -ում եղածին, որովհետև օգտվողի պատճենը ստվերում է համակարգի պատճենը։ Գործարկեք desktop-file-validate, երբ գրառումն իրեն վատ է պահում, և փնտրեք հնացած պատճեն, որը դեռ ցույց է տալիս հեռացված ուղուն։ Անվավեր օգտվողի պատճենը դեռ նախընտրելի է աշխատասեղանների մեծ մասում, այնպես որ կոտրված ֆայլը կարող է հանել գրառումը ընտրացանկից, մինչ փաթեթի ֆայլը մնում է վավեր։ Ապա գործարկեք նույն հրամանը ձեռքով և համեմատեք, թե ինչ են տալիս երկու մեկնարկները։

Որտեղ է իրականում ապրում նախապատվությունը

Այն հավելվածները, որոնք հետևում են XDG հիմնային թղթապանակների կանոններին, կազմաձևը դնում են $XDG_CONFIG_HOME -ի տակ, տևական վիճակը՝ $XDG_STATE_HOME -ի տակ, իսկ մեկանգամյա տվյալները՝ $XDG_CACHE_HOME -ի տակ, և լռելյայն օգտագործում են ~/.config, ~/.local/state և ~/.cache, երբ այդ փոփոխականները սահմանված չեն։ Այդ երեքը դերեր են, ոչ խոստումներ, ուստի կոնկրետ VPN արտադրանք կարող է փաստագրել բոլորովին այլ բան։ Արտադրողի սեփական փաստաթղթերը կարդալն ավելի լավ է, քան թղթապանակի անունից ուղի գուշակելը։ Երբ փաստաթղթերը սակավ են, դիտեք գործընթացը, այլ ոչ թե ֆայլային համակարգը։

Ֆայլերի բացումներով զտված հետագծումը ցույց է տալիս յուրաքանչյուր կազմաձևի ուղի, որը փորձում է հաճախորդը, ներառյալ այն, որը նա գրում է դուրս գալիս։ Գործարկեք այն նույն օգտվողով և նույն միջավայրով, ապա համեմատեք այդ ուղիները ձեր սպասած թղթապանակների հետ։

strace -f -e trace=openat,stat -o /tmp/vpn.log vpn-client

Գաղտնիքներն ու պրոֆիլներն ունեն տարբեր սեփականատերեր

Պահված պրոֆիլը և պահված վկայականը առանձին օբյեկտներ են, հաճախ առանձին պահոցով։ Մեկը կարող է ապրել կազմաձևի ֆայլում, մինչ մյուսը նստում է բանալիների կապոցում, որը բացվում է յուրաքանչյուր նստաշրջանի համար, ուստի գաղտնաբառ նորից պահանջող հաճախորդը գուցե պարզապես անում է այն, ինչի համար նախատեսված է։ Պրոֆիլը ջնջելը՝ հուշումը կանգնեցնելու համար, այն ձևն է, որով մարդիկ կորցնում են աշխատող կազմաձև։

Արտոնյալ մեկնարկները սա ավելի են բարդացնում, որովհետև sudo-ով կամ PolicyKit օգնականով մեկնարկը կարող է ներկայացնել այլ տնային թղթապանակ և հետևաբար այլ կազմաձևերի հավաքածու։ Ուղղեք սեփականությունը կոնկրետ այն ֆայլի վրա, որը փաստագրում է հավելվածը, այլ ոչ թե ռեկուրսիվ ամբողջ տնային թղթապանակի վրա, ապա որոշեք, թե որ ինքնությունը պետք է տիրապետի պրոֆիլին հետագայում, և ապագա մեկնարկները պահեք դրան համահունչ։

Ինչ կարող է պատկերակը ասել ձեզ և ինչ՝ ոչ

Պատկերակը ապացուցում է, որ գործարկիչի ֆայլը լուծվում է, և ոչ ավելին։ Կապակցման վիճակը պատկանում է հաճախորդին, ուստի միակ վստահելի ստուգումը միջերեսը, ուղին կամ հենց հաճախորդի կարգավիճակի արտածումն է։ Սկուտեղի հավելվածը, որը չի մեկնարկել, կարող է աշխատող թունելը կոտրված երևացնել, մինչ հնացած հավելվածը կարող է կոտրվածը՝ կարգին։ Ստուգեք կապակցումը և գործարկիչը առանձին, ապա գրեք, թե որն եք իրականում շտկել։

Եթե երկուսն էլ կոտրված են եղել, դիմացեք վերանորոգումը մեկ փոփոխություն համարելու գայթակղությանը։ Ուղղեք գրառումը, հաստատեք մեկնարկը, ապա հաստատեք թունելը և գրի առեք յուրաքանչյուր քայլի արդյունքը։ Հենց այդ գրառումն է դարձնում հաջորդ՝ կորցրած կարգավորումների մասին զեկույցը ախտորոշելի, այլ ոչ թե սրա կրկնություն, և այն նաև ասում է հաջորդ մարդուն, թե խնդրի որ կեսն էր իրական։

Առնչվող հոդվածներ