systemd: 'Unit' 섹션의 알 수 없는 키 이름 'ConditionEnvironment'

systemd: 'Unit' 섹션의 알 수 없는 키 이름 'ConditionEnvironment'

저는 systemd 버전 246을 사용하고 있습니다.

$ systemctl --version                           
systemd 246 (246.2-1-arch)
+PAM +AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid

해당 문서는 ConditionEnvironmentsystemd.unit 맨페이지에 있습니다. 그러나 다음과 같은 단위 파일에서 사용하면 ~/.config/systemd/user/i3-session-pre.target:

[Unit]
Description=i3 session
Documentation=man:systemd.special(7)
BindsTo=graphical-session-pre.target
ConditionEnvironment=XDG_SESSION_DESKTOP=i3

내 사용자 로그에 다음 항목이 표시됩니다.

systemd[599]: /home/****/.config/systemd/user/i3-session-pre.target:5: Unknown key name 'ConditionEnvironment' in section 'Unit', ignoring.

또한 systemd-analyze condition이 상황을 처리할 수 없습니다.

$ systemd-analyze condition ConditionEnvironment=XDG_SESSION_DESKTOP=i3
Cannot parse "ConditionEnvironment=XDG_SESSION_DESKTOP=i3".

내가 뭘 잘못했나요?

답변1

나는 당신이 잘못한 것이 없다고 생각합니다. systemd에 버그가 있는 것 같아요.

Debian 테스트(systemd 246 및 업그레이드 246.1 이후)에서 다음을 관찰했습니다.

ConditionEnvironment=단지버전 246으로 출시됨2020년 7월 30일(이 글을 작성하기 2.5주 전) 및풀 리퀘스트5월 15일에 통합되었습니다. 그러므로 아직 성숙하지 않았다고 보는 것이 타당하다.

이것이 버그라고 생각하게 만드는 테스트는 다음과 같습니다.

$ systemd-analyze condition \
    'ConditionKernelVersion='  \
    'ConditionKernelVersion='  \
    'ConditionACPower=' \
    'ConditionArchitecture=' \
    'AssertPathExists=' \
    'ConditionEnvironment='
Cannot parse "ConditionEnvironment=".

각 조건을 하나씩 실행하면 을 제외한 모든 조건이 빈 표현식으로 해석됩니다 ConditionEnvironment=.

귀하의 목표를 그대로 (i3 환경에서도) 시도한 결과 ConditionEnvironment=목표 달성 여부에 아무런 영향을 미치지 않는 것으로 나타났습니다. 올바른 값과 잘못된 값을 모두 시도했습니다. 따라서 이 질문은 에 국한된 것이 아닙니다 systemd-analyze.

제가 매우 흥미로웠던 것 중 하나는 댓글이었습니다.xdg-autostart-generator/xdg-autostart-condition.c:

 * This binary is intended to be run as an ExecCondition= in units generated
 * by the xdg-autostart-generator. It does the appropriate checks against
 * XDG_CURRENT_DESKTOP that are too advanced for simple ConditionEnvironment=
 * matches.

/lib/systemd/systemd-xdg-autostart-condition나는 그 오류가 타당하다고 생각하지만, 작업 중인 정확한 환경에서 문제를 극복하기 위해 생성기를 제작(및 배포)했다는 점이 흥미롭다고 생각합니다 .

나는오류 보고서데비안과 함께. 나는 데비안 개발자들이 이를 살펴보고 시스템 개발자들에게 업스트림을 전달해주기를 바랍니다.

관련 정보