% uname --operating-system --kernel-name --kernel-version --kernel-release
Linux 4.9.6-200.fc25.x86_64 #1 SMP Thu Jan 26 10:17:45 UTC 2017 GNU/Linux
st 터미널을 다운로드/설치했습니다(간단한 터미널), 이를 기본 터미널 에뮬레이터로 설정하고 싶었지만큰 실수, 이 명령을 루트로 실행 중입니다: % su -c 'chsh -s /usr/local/bin/st'
.
이제 루트로 로그인하거나 명령을 실행하려고 할 때마다 다음 메시지가 인쇄됩니다 Can't open display
. 다음 명령(아래 표시)을 시도했지만 그 중 아무 것도 작동하지 않습니다.
% env -i bash
% su
Password:
Can't open display
% su -c 'env -i bash'
Password:
Can't open display
% su -c 'chsh -s /usr/bin/bash'
Password:
Can't open display
% su -s bash
Password:
su: using restricted shell /usr/local/bin/st
Can't open display
% su
Password:
Couldn't read from shell: Input/output error
child finished with error '256'
%
고쳐 쓰다: 제안된 답변의 지침을 따르려고 했습니다.
- 부트로더 프롬프트에서 부팅에 대한 일반 항목으로 이동합니다.
- Enter를 누르는 대신 e를 눌러 커널 명령줄 매개변수를 먼저 편집하십시오.
- 열린 편집기에서 화살표 키를 사용하여 linux로 시작하는 줄을 찾아 그 끝으로 이동하여 init=/bin/sh를 추가합니다. 이는 일시적으로 init 시스템을 시스템의 쉘로 대체하며, init는 루트에 의해 시작되므로 이것이 루트 쉘이 됩니다.
- CTRL+X를 눌러 수정된 항목을 실행합니다.
- 올바른 매개변수를 사용하여 chsh를 다시 실행하십시오.
하지만 4단계를 수행할 때 다음과 같은 문제에 직면하게 됩니다.이것화면!
답변1
내가 큰 실수를 했어
당신은 그랬습니다. 이 문제에 대한 해결책은 슈퍼유저로 구성된 로그인 셸을 사용하지 않고 슈퍼유저로 명령을 실행하는 방법을 찾는 것입니다.
구조 및 긴급 모드에서는 불가능합니다.~하지 않는 한/usr
아이러니하게도 지난 30년간의 추세와는 반대로 개별 디스크 볼륨을 갖게 된 것은 행운입니다 . 포함된 디스크 볼륨이 /usr/local/bin/st
루트 디렉터리가 아닌 경우 파일은 실행되지 않습니다. 이 경우 긴급 로그인을 위해 다음 명령어를 사용 sulogin
하시거나emergency-login
하드와이어된 쉘 이름으로 폴백을 시도합니다.
이를 달성하는 또 다른 방법은 슈퍼유저의 사용자 계정 데이터베이스에 제공된 쉘 대신 환경 변수에 의해 제공된 쉘을 대화형 쉘로 실행하는 -s
옵션을 사용하는 것입니다. ( 옵션을 비교하세요.)sudo
SHELL
-i
doas -s
마찬가지로 환경 변수에 지정된 쉘을 사용하십시오 SHELL
.
일부 운영 체제 su
명령은 옵션을 통해 이를 수행할 수도 있습니다 --shell
. 그러나 이것은 흔한 일이 아닙니다. 또한, 앞서 언급한 바와 같이 계정 데이터베이스의 슈퍼유저 쉘이 인증된 쉘 목록( )에 없으면 /etc/shells
무시됩니다.