Arch Linux에서 systemd를 사용하면 다음 명령이 모두 기호 링크를 가리킵니다 systemctl
.
/usr/bin/telinit
/usr/bin/poweroff
/usr/bin/runlevel
/usr/bin/reboot
/usr/bin/halt
/usr/bin/shutdown
승인과 관련된 그들의 행동이 혼란스럽다고 생각합니다.
$ shutdown
Must be root.
$ halt
Must be root.
$ telinit 3
# Asks for Polkit authorization
승인 poweroff
이나 reboot
승인이 요청되지 않습니다. poweroff
실제로 시스템을 종료하는 대신 노트북은 계속 켜져 있고 화면에는 전원이 무기한 꺼진다는 텍스트가 표시됩니다.
저는 Polkit 규칙을 수정하지 않았는데 왜 그렇게 작동하는지 궁금합니다.
- 모든 명령은 루트가 아닌 관리자인
wheel
. /etc/polkit-1/rules.d
기본 규칙 세트만 포함된 것 같습니다.# tail /etc/polkit-1/rules.d/* // DO NOT EDIT THIS FILE, it will be overwritten on update // // Default rules for polkit // // See the polkit(8) man page for more information // about configuring polkit. polkit.addAdminRule(function(action, subject) { return ["unix-group:wheel"]; });
꼼꼼히 살펴보니 , , 부품이 /usr/share/polkit-1/actions/org.freedesktop.login1.policy
있는데 yes로 설정되어 있습니다 . 하지만 그렇지 않습니다 . 이것이 이유라면 왜 이런 일이 발생합니까?poweroff
reboot
suspend
hibernate
allow_active
shutdown
답변1
이것은 매우 복잡합니다. 이러한 명령을 열거 순서대로 설명하겠습니다.
telinit
다양한 매개변수는
telinit
다양한(다른) 하위 명령으로 직접 변환됩니다systemctl
. ~에 따르면원격 초기화(8)(systemd 패키지의 문서):2, 3, 4, 5
SysV 런레벨을 변경합니다. 이는
runlevel2.target
, ...에 대한 활성화 요청 으로 변환되며 , , ...runlevel3.target
와 동일합니다 .systemctl isolate runlevel2.target
systemctl isolate runlevel3.target
따라서 이러한 명령은 으로 변환되며
systemctl isolate
그 자체는 polkit 작업에 의해 제어됩니다org.freedesktop.systemd1.manage-units
. 이 작업에 대한 권한은 기본적으로관리자 인증이 필요합니다— 활성 세션, 비활성 세션 및 세션 외부의 모든 프로세스에 적용됩니다.(그런데 기본적으로 polkit은
wheel
그룹의 모든 사용자를 관리자로 처리하도록 구성되어 있으므로 자신을 인증하라는 메시지가 표시됩니다.)halt
,poweroff
,reboot
명령
poweroff
과reboot
작업은 두 단계로 이루어집니다.- 루트가 아닌 사용자로 호출되고
logind
사용 가능한 경우logind
작업을 수행하려면 polkit 작업이 필요합니다org.freedesktop.login1.*
. - 그렇지 않으면 거의 동등하거나
systemctl poweroff
실행systemctl reboot
되고 있지만,폴킷에 문의할 필요가 없습니다.
halt
비슷하지만 항상 두 번째 경로로 이동합니다(거의 동일함systemctl halt
). 로그인해서 멈출 수 있는 방법은 없습니다."거의 같음"에 주목하십시오. 당신이 그렇게한다면
poweroff
루트가 아닌 로그인에서reboot
루트가 아닌 로그인에서halt
루트가 아닌 경우,
"루트여야 합니다"라는 메시지가 표시됩니다. polkit을 통해 인증하는 대신
org.freedesktop.systemd1.manage-units
. 또한systemctl poweroff
또는 을 사용하면 polkit을 통해 인증systemctl reboot
할systemctl halt
수 있습니다. 이는 버그일 수 있습니다.- 루트가 아닌 사용자로 호출되고
shutdown
이 도구는 지연된 중단, 일시 중지 또는 다시 시작을 예약하는 데 사용할 수 있습니다. 인수 없이 호출하면 1분 지연을 의미합니다. 기본 동작은 전원을 끄는 것입니다. ~에서닫기(8):
시간 문자열은 시간/분을 나타내는 "hh:mm" 형식일 수 있으며 종료 수행 시간을 지정하고 24시간 형식으로 지정됩니다. 또는 지금부터 m까지의 특정 시간을 나타내는 "+m" 구문을 사용할 수도 있습니다. "now"는 즉시 종료를 트리거하는 "+0"의 별칭입니다. 시간 매개변수가 지정되지 않으면 "+1"이 암시됩니다.
시간 초과 및 벽 메시지가 지정되지 않은 경우 또는 (#2 참조) 중 하나 와
shutdown
동일합니다 .poweroff
halt
reboot
시간 초과 또는 메시지 월이 지정된 경우
shutdown
루트 권한이 필요합니다.poweroff
종료하지 마세요실제로 그래야 합니다. 이는 커널 버그일 수 있습니다.