| ENVIRONMENT.D(5) | environment.d | ENVIRONMENT.D(5) |
نام (NAME)
environment.d - تعریف متغیرهای محیطی برای نشستهای کاربری
خلاصه دستور (SYNOPSIS)
توضیحات (DESCRIPTION)
فایلهای پیکربندی در دایرکتوریهای environment.d/ شامل فهرستهایی از مقداردهیهای متغیرهای محیطی هستند که به سرویسهای آغازشده توسط نمونه کاربری systemd ارسال میشوند. systemd-environment-d-generator(8) آنها را تجزیه کرده و محیط صادرشده توسط نمونه کاربری systemd را بهروزرسانی میکند. برای بررسی اینکه کدام فرآیندها این متغیرها را به ارث میبرند، ادامه متن را ببینید.
دایرکتوری پیکربندی در سطح کاربر به طور پیشفرض ~/.config/environment.d/ است. اگر $XDG_CONFIG_HOME روی یک مسیر مطلق در محیط مدیر سرویس کاربر تنظیم شده باشد (مثلاً از طریق PAM یا /etc/environment)، بر ~/.config/ اولویت دارد. توجه داشته باشید که این مسئله نکتهای در راهاندازی اولیه (bootstrapping) ایجاد میکند: متغیرهای تنظیمشده در فایلهای environment.d/، از جمله خودِ $XDG_CONFIG_HOME، هنگامی که مولد تعیین میکند کدام دایرکتوری را بخواند، در دسترس نیستند.
توصیه میشود برای سادهسازی ترتیببندی، از پیشوندهای عددی در نام فایلها استفاده شود.
برای سازگاری با نسخههای پیشین، یک پیوند نمادین (symlink) به /etc/environment نصب شده است، بنابراین این فایل نیز تجزیه میشود.
دایرکتوریهای پیکربندی و اولویتبندی (CONFIGURATION DIRECTORIES AND PRECEDENCE)
فایلهای پیکربندی از دایرکتوریهای موجود در /etc/، /run/، /usr/local/lib/ و /usr/lib/، به ترتیب اولویت، همانطور که در بخش خلاصه دستور در بالا فهرست شده است، خوانده میشوند. فایلها باید پسوند ".conf" داشته باشند. فایلهای موجود در /etc/ بر فایلهای همنام در /run/، /usr/local/lib/ و /usr/lib/ ارجحیت دارند. فایلهای موجود در /run/ بر فایلهای همنام زیر /usr/ ارجحیت دارند.
تمام فایلهای پیکربندی صرفنظر از دایرکتوری محل قرارگیریشان، بر اساس نام فایل به ترتیب واژهنگاری (lexicographic) مرتب میشوند. اگر چندین فایل یک گزینه را مشخص کنند، مدخل فایلی که از لحاظ واژهنگاری نام مؤخرتری دارد اولویت خواهد داشت. بنابراین، پیکربندی موجود در یک فایل خاص میتواند یا به طور کامل جایگزین شود (با قرار دادن فایلی با همان نام در دایرکتوری دارای اولویت بالاتر)، یا تنظیمات مجزا میتوانند تغییر یابند (با مشخص کردن تنظیمات بیشتر در فایلی با نام دیگر که از نظر ترتیب در رده بعدی قرار میگیرد).
بستهها باید فایلهای پیکربندی خود را در /usr/lib/ (بستههای توزیع) یا /usr/local/lib/ (نصبهای محلی) [1] نصب کنند. فایلهای موجود در /etc/ برای مدیر سیستم محلی محفوظ هستند، که میتواند با استفاده از این منطق، فایلهای پیکربندی ارائهشده توسط بستههای توزیعکننده را بازنویسی (override) کند.
توصیه میشود برای سادهسازی ترتیببندی، تمام نامهای فایل با یک عدد دورقمی و یک خط تیره شروع شوند. توصیه میشود از محدوده 10-40 برای فایلهای پیکربندی در /usr/ و محدوده 60-90 برای فایلهای پیکربندی در /etc/ و /run/ استفاده شود تا اطمینان حاصل گردد که فایلهای پیکربندی محلی و گذرا همواره بر فایلهای پیکربندی ارائهشده توسط توزیعکننده سیستمعامل اولویت خواهند داشت.
اگر مدیر سیستم بخواهد یک فایل پیکربندی ارائهشده توسط توزیعکننده را غیرفعال کند، روش توصیهشده قرار دادن یک پیوند نمادین (symlink) به /dev/null در دایرکتوری پیکربندی در /etc/، با همان نام فایل پیکربندی توزیعکننده است. اگر فایل پیکربندی توزیعکننده در ایمیج initrd گنجانده شده باشد، ایمیج باید بازتولید شود.
فرمت پیکربندی (CONFIGURATION FORMAT)
فایلهای پیکربندی حاوی فهرستی از انتسابهای متغیرهای محیطی به صورت "KEY=VALUE" هستند که با خط جدید جدا میشوند. سمت راست این انتسابها میتواند با استفاده از قالب "${OTHER_KEY}" و "$OTHER_KEY" به متغیرهای محیطی تعریفشده قبلی ارجاع دهد. همچنین میتوان از "${FOO:-DEFAULT_VALUE}" استفاده کرد تا همانند "${FOO}" بسط یابد، مگر اینکه نتیجه بسط خالی باشد که در این صورت به DEFAULT_VALUE بسط مییابد، و از "${FOO:+ALTERNATE_VALUE}" برای بسط یافتن به ALTERNATE_VALUE تا زمانی که "${FOO}" به مقداری غیرخالی بسط داده شود استفاده کرد. میتوانید نویسه دلار واقعی "$" را با دو بار نوشتن آن اسکیپ کنید، مانند "$$".
نویسه بکاسلش "\" اگر بلافاصله با یک خط جدید دنبال شود، به عنوان ادامه خط عمل میکند (هر دو نویسه نادیده گرفته میشوند)؛ در تمام موارد دیگر، بکاسلش مصرف شده و نویسه پس از آن به صورت لفظی (literal) در مقدار گنجانده میشود. این کار میتواند برای حفظ فاصلههای خالی ابتدایی/انتهایی یا درج بکاسلشهای واقعی استفاده شود.
میتوانید به دلخواه، سمت راست انتسابها را در جفتهای 'کوتیشن تکی' یا "دابل کوتیشن" محصور کنید؛ این نشانهها قبل از ذخیره مقدار حذف خواهند شد. استفاده از هر کدام از شیوههای نقلقول بر بسط متغیر تأثیری ندارد؛ با این حال، کوتیشن تکی اسکیپ کردن با بکاسلش را کاملاً غیرفعال میکند، در حالی که دابل کوتیشن بکاسلشهایی را که پیش از دابل کوتیشن """، علامت دلار "$"، بکاسلش "\"، بکتیک "`" و خطهای جدید قرار دارند حذف میکند و سایر بکاسلشها را دستنخورده باقی میگذارد.
نویسههای فاصلهگذاری ابتدایی و انتهایی از هر دو سمت چپ و راست انتساب حذف میشوند. برای حفظ چنین فاصلههایی در مقدار، میتوانید کل مقدار را در کوتیشن قرار دهید، یا نویسههای فاصله را با بکاسلش اسکیپ کنید. همچنین میتوانید خطوط جدید واقعی را با قرار دادن مقدار در کوتیشن لحاظ نمایید.
هر KEY باید یک نام متغیر معتبر باشد. خطوط خالی و خطوطی که با نویسههای توضیحات "#" یا ";" آغاز میشوند نادیده گرفته خواهند شد. هیچ عنصر دیگری از نحو شل پشتیبانی نمیشود.
مثالها (EXAMPLES)
مثال 1. آمادهسازی محیط برای دسترسی به برنامهای که در /opt/foo نصب شده است
/etc/environment.d/60-foo.conf:
FOO_DEBUG=force-software-gl,log-verbose
PATH=/opt/foo/bin:$PATH
LD_LIBRARY_PATH=/opt/foo/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
XDG_DATA_DIRS=/opt/foo/share:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/}
مثال 2. اسکیپ کردن و بسط متغیر
/etc/environment.d/70-bar.conf:
# A comment
test_var=(variable)
; Another comment
test_comment=value # This is a part of the variable, and not a comment!
test_none= \ before\
after "" '' \${test_var}
test_double=" \ before\
after "" '' \${test_var}"
test_single=' \ before\
after "" '' \${test_var}'
# The above example produces the following environment variables, written using
# C-style string escapes:
#
# test_var="(variable)"
# test_comment="value # This is a part of the variable, and not a comment!"
# test_none=" beforeafter \"\" '' (variable)"
# test_double=" \\ beforeafter '' (variable)"
# test_single=" \\ before\\\nafter \"\" \\(variable)"
دامنه کاربرد (APPLICABILITY)
متغیرهای محیطی صادرشده توسط مدیر سرویس کاربر (نمونه systemd --user آغازشده در سرویس سیستمی user@uid.service) به تمام سرویسهای آغازشده توسط آن مدیر سرویس منتقل میشوند. به طور خاص، این ممکن است شامل سرویسهایی باشد که شلهای کاربر را اجرا میکنند. برای مثال در محیط GNOME، شبیهساز ترمینال گرافیکی به عنوان واحد کاربری gnome-terminal-server.service اجرا میشود که به نوبه خود شل کاربر را اجرا میکند، بنابراین آن شل متغیرهای محیطی صادرشده توسط مدیر کاربر را به ارث خواهد برد. برای سایر نمونههای شل که توسط مدیر سرویس کاربر راهاندازی نشدهاند، محیطی که به ارث میبرند توسط برنامهای که آنها را آغاز کرده است تعریف میشود. نکته: به طور کلی، واحدهای systemd.service(5) حاوی برنامههای راهاندازیشده توسط systemd هستند و واحدهای systemd.scope(5) حاوی برنامههای راهاندازیشده توسط چیز دیگری میباشند.
توجه داشته باشید که این فایلها بر بلوک محیطی خودِ مدیر سرویس تأثیری نمیگذارند، بلکه منحصراً بر بلوکهای محیطی ارسالشده به سرویسهایی که مدیریت میکند اثرگذارند. بنابراین متغیرهای محیطی تنظیمشده از این طریق نمیتوانند برای تغییر رفتار مدیر سرویس استفاده شوند. به منظور اعمال تغییرات در بلوک محیطی مدیر سرویس، محیط باید قبل از فراخوانی مدیر سرویس کاربر اصلاح شود، به عنوان مثال از طریق مدیر سرویس سیستم یا از طریق یک ماژول PAM.
به طور خاص، برای ورودهای ssh، سرویس sshd(8) محیطی میسازد که ترکیبی از متغیرهای هدایتشده از سیستم راه دور و متغیرهای تعریفشده توسط sshd است؛ به بحث در ssh(1) مراجعه کنید. یک نشست نمایشگر گرافیکی نیز سازوکار مشابهی برای تعریف محیط خواهد داشت. توجه داشته باشید که برخی از مدیرها نمونه کاربری systemd را برای محیط صادرشده پرسوجو کرده و این پیکربندی را با استفاده از systemctl show-environment یا فراخوانی بنیادین D-Bus به برنامههایی که شروع میکنند تزریق مینمایند.
همچنین ببینید (SEE ALSO)
systemd(1), systemd-environment-d-generator(8), systemd.environment-generator(7)
یادداشتها (NOTES)
- 1.
- 💣💥🧨💥💥💣 لطفاً توجه داشته باشید که این فایلهای پیکربندی باید در تمام زمانها در دسترس باشند. اگر /usr/local/ یک پارتیشن جداگانه باشد، ممکن است در اوایل بوت در دسترس نباشد و نباید برای پیکربندی استفاده شود.
| systemd 261.2 |