RDP 초기 설정에 API 자동 설치 및 API 기반 활성화 추가

- install_rdp_api() 함수 추가 (자동 API 설치)
- RDP 활성화 시 API를 통해 모드 전환 (curl POST /toggle)
- API 작동 = RDP 제어 가능 보장
- API 실패 시 자동으로 직접 활성화 fallback
- 설정 요약에 API 설치 상태 표시
- 수동 적용 안내에 API 명령어 포함

장점:
- API 없이 RDP만 켜지는 상황 방지
- 항상 원격 제어 가능한 상태 보장
- 사용자가 두 스크립트 따로 실행할 필요 없음
This commit is contained in:
Claude 2025-11-17 01:40:59 +00:00
parent 85c5e1ec29
commit 9c952449d9

View File

@ -452,17 +452,84 @@ EOF
msg_ok "Openbox 설정 완료"
}
# RDP Toggle API 설치
install_rdp_api() {
msg_info "RDP Toggle API 설치 중..."
local INSTALL_DIR="/opt/rdp-toggle-api"
local VENV_DIR="$INSTALL_DIR/venv"
local GITEA_BASE_URL="https://git.0bin.in/thug0bin/pve9-repo-fix/raw/branch/main/RDP"
# Python 및 venv 설치
msg_info "Python 및 필수 패키지 설치 중..."
apt install -y python3 python3-venv python3-pip curl > /dev/null 2>&1
# 설치 디렉토리 생성
mkdir -p "$INSTALL_DIR"
# 가상환경 생성
msg_info "Python 가상환경 생성 중..."
python3 -m venv "$VENV_DIR"
# 가상환경에서 패키지 설치
msg_info "FastAPI 패키지 설치 중..."
"$VENV_DIR/bin/pip" install --upgrade pip > /dev/null 2>&1
"$VENV_DIR/bin/pip" install fastapi==0.115.5 uvicorn==0.32.1 python-multipart==0.0.20 pydantic==2.10.3 > /dev/null 2>&1
# API 파일 다운로드
msg_info "API 서버 파일 다운로드 중..."
curl -fsSL "$GITEA_BASE_URL/rdp-toggle-api.py" -o "$INSTALL_DIR/rdp-toggle-api.py"
chmod +x "$INSTALL_DIR/rdp-toggle-api.py"
# systemd 서비스 생성
msg_info "systemd 서비스 생성 중..."
cat > /etc/systemd/system/rdp-toggle-api.service << EOF
[Unit]
Description=RDP Toggle API Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=$INSTALL_DIR
ExecStart=$VENV_DIR/bin/python $INSTALL_DIR/rdp-toggle-api.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# 서비스 활성화 및 시작
msg_info "API 서비스 활성화 및 시작 중..."
systemctl daemon-reload
systemctl enable rdp-toggle-api.service > /dev/null 2>&1
systemctl start rdp-toggle-api.service
# API 서비스 시작 대기
sleep 3
# API 서비스 확인
if systemctl is-active rdp-toggle-api.service > /dev/null 2>&1; then
msg_ok "RDP Toggle API 설치 완료 (포트 8090)"
return 0
else
msg_warn "API 서비스가 정상적으로 시작되지 않았습니다."
return 1
fi
}
# 설정 테스트
test_configuration() {
msg_info "설정 테스트 중..."
# systemd 서비스 상태 확인
if systemctl is-enabled getty@tty1.service > /dev/null 2>&1; then
msg_ok "getty@tty1 서비스가 활성화되어 있습니다."
else
msg_warn "getty@tty1 서비스가 비활성화되어 있습니다."
fi
# 필수 파일들 존재 확인
local files=(
"/etc/systemd/system/getty@tty1.service.d/override.conf"
@ -470,7 +537,7 @@ test_configuration() {
"/home/$LOCAL_USER/.xinitrc"
"/home/$LOCAL_USER/.config/openbox/rc.xml"
)
for file in "${files[@]}"; do
if [ -f "$file" ]; then
msg_ok "설정 파일 존재: $file"
@ -478,7 +545,7 @@ test_configuration() {
msg_error "설정 파일 누락: $file"
fi
done
# FreeRDP3 설치 확인
if command -v xfreerdp3 > /dev/null 2>&1; then
msg_ok "FreeRDP3 설치 확인됨"
@ -500,6 +567,7 @@ print_completion() {
echo " - 로컬 사용자: $LOCAL_USER"
echo " - 자동 로그인: 활성화됨 (tty1)"
echo " - 풀스크린 RDP: 활성화됨"
echo " - RDP Toggle API: 설치됨 (포트 8090)"
echo ""
echo -e "${YELLOW}다음 단계:${NC}"
echo " 1. RDP 연결을 활성화하세요 (즉시 적용 또는 재부팅)"
@ -516,20 +584,36 @@ print_completion() {
case $apply_choice in
1)
msg_info "getty@tty1 서비스를 재시작하여 즉시 적용합니다..."
msg_info "API를 통해 RDP 모드로 전환합니다..."
systemctl daemon-reload
systemctl restart getty@tty1.service
sleep 1
echo ""
echo -e "${GREEN}✅ RDP 연결이 tty1에서 활성화되었습니다!${NC}"
echo ""
echo -e "${YELLOW}참고:${NC}"
echo " - 물리 모니터(tty1)에서 RDP 연결이 시작됩니다"
echo " - SSH 세션은 계속 사용 가능합니다"
echo " - 현재 SSH 세션에서는 RDP 화면을 볼 수 없습니다"
echo " - Shell 모드로 전환하려면: chvt 1 && systemctl stop getty@tty1"
echo ""
# API를 통해 RDP 모드 활성화
local api_response=$(curl -s -X POST http://localhost:8090/toggle \
-H 'Content-Type: application/json' \
-d '{"mode":"rdp"}' 2>/dev/null)
if echo "$api_response" | grep -q '"status":"success"'; then
echo ""
echo -e "${GREEN}✅ RDP 모드가 API를 통해 활성화되었습니다!${NC}"
echo ""
echo -e "${YELLOW}참고:${NC}"
echo " - 물리 모니터(tty1)에서 RDP 연결이 시작됩니다"
echo " - SSH 세션은 계속 사용 가능합니다"
echo " - RDP Toggle API: http://$(hostname -I | awk '{print $1}'):8090"
echo ""
echo -e "${CYAN}API 사용 예시:${NC}"
echo " Shell 모드로 전환: curl -X POST http://localhost:8090/toggle -H 'Content-Type: application/json' -d '{\"mode\":\"shell\"}'"
echo " 상태 확인: curl http://localhost:8090/status"
echo ""
else
msg_warn "API를 통한 RDP 활성화에 실패했습니다. 수동으로 활성화합니다..."
systemctl restart getty@tty1.service
sleep 1
echo ""
echo -e "${GREEN}✅ RDP 연결이 tty1에서 활성화되었습니다!${NC}"
echo ""
fi
;;
2)
msg_info "시스템을 재부팅합니다..."
@ -541,7 +625,8 @@ print_completion() {
echo -e "${GREEN}설정이 완료되었습니다.${NC}"
echo ""
echo -e "${YELLOW}수동 적용 방법:${NC}"
echo " 즉시 적용: systemctl daemon-reload && systemctl restart getty@tty1"
echo " API로 RDP 활성화: curl -X POST http://localhost:8090/toggle -H 'Content-Type: application/json' -d '{\"mode\":\"rdp\"}'"
echo " 또는 직접 활성화: systemctl daemon-reload && systemctl restart getty@tty1"
echo " 또는 재부팅: reboot"
echo ""
;;
@ -572,7 +657,10 @@ main() {
setup_x_autostart
setup_rdp_connection
setup_openbox
# RDP Toggle API 설치
install_rdp_api
# 테스트 및 완료
test_configuration
print_completion