proxmox-rdp-autosetup/rdp-control.sh
root f8f5c6face fix: RDP 제어 스크립트 상태 감지 로직 개선
- X 서버 프로세스 검출 패턴 수정 (Xorg.*tty1 → /usr/lib/xorg/Xorg)
- RDP 연결 상태 검사 개선으로 실제 실행 상태 정확히 반영
- Gitea 리포지토리 설정 가이드 문서 추가

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 19:41:09 +09:00

259 lines
6.7 KiB
Bash
Executable File

#!/bin/bash
# RDP Auto-Connect Control Script
# RDP 자동 연결을 켜고 끄는 제어 스크립트
set -euo pipefail
# 색상 코드
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# RDP 설정 변수
RDP_SERVER="ysleadersos.com:6642"
RDP_USER="doctor-03"
RDP_PASSWORD="@flejtm301"
LOCAL_USER="rdpuser"
# 로그 함수
msg_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
msg_ok() {
echo -e "${GREEN}[OK]${NC} $1"
}
msg_error() {
echo -e "${RED}[ERROR]${NC} $1"
exit 1
}
msg_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
# 도움말 출력
show_help() {
echo -e "${CYAN}RDP Auto-Connect Control Script${NC}"
echo ""
echo "사용법:"
echo " $0 start - RDP 자동 연결 시작"
echo " $0 stop - RDP 자동 연결 중지"
echo " $0 status - RDP 연결 상태 확인"
echo " $0 restart - RDP 자동 연결 재시작"
echo ""
echo "설정 정보:"
echo " RDP 서버: $RDP_SERVER"
echo " RDP 사용자: $RDP_USER"
echo " 로컬 사용자: $LOCAL_USER"
echo ""
}
# 상태 확인
check_status() {
local rdp_running=false
local x_running=false
local getty_enabled=false
# RDP 프로세스 확인
if pgrep -f "xfreerdp3" >/dev/null 2>&1; then
rdp_running=true
fi
# X 서버 확인
if pgrep -f "/usr/lib/xorg/Xorg" >/dev/null 2>&1 || pgrep -f "Xorg.*vt1" >/dev/null 2>&1; then
x_running=true
fi
# getty 서비스 확인
if systemctl is-enabled getty@tty1.service >/dev/null 2>&1; then
getty_enabled=true
fi
echo -e "${CYAN}=== RDP 자동 연결 상태 ===${NC}"
echo ""
if $getty_enabled; then
echo -e "자동 로그인: ${GREEN}활성화${NC}"
else
echo -e "자동 로그인: ${RED}비활성화${NC}"
fi
if $x_running; then
echo -e "X 서버: ${GREEN}실행 중${NC}"
else
echo -e "X 서버: ${RED}중지됨${NC}"
fi
if $rdp_running; then
echo -e "RDP 연결: ${GREEN}연결됨${NC}"
echo -e "연결 정보: ${YELLOW}$RDP_USER@$RDP_SERVER${NC}"
else
echo -e "RDP 연결: ${RED}연결 안됨${NC}"
fi
echo ""
# 로그 파일 정보
if [ -f "/home/$LOCAL_USER/rdp.log" ]; then
local log_lines=$(wc -l < "/home/$LOCAL_USER/rdp.log" 2>/dev/null || echo "0")
echo "RDP 로그: $log_lines 줄 (/home/$LOCAL_USER/rdp.log)"
fi
if [ -f "/home/$LOCAL_USER/rdp-error.log" ]; then
local error_lines=$(wc -l < "/home/$LOCAL_USER/rdp-error.log" 2>/dev/null || echo "0")
echo "에러 로그: $error_lines 줄 (/home/$LOCAL_USER/rdp-error.log)"
fi
echo ""
# 전체 상태 요약
if $getty_enabled && $rdp_running; then
echo -e "전체 상태: ${GREEN}정상 작동 중${NC}"
elif $getty_enabled && ! $rdp_running; then
echo -e "전체 상태: ${YELLOW}시작 중 또는 연결 실패${NC}"
else
echo -e "전체 상태: ${RED}비활성화됨${NC}"
fi
}
# RDP 자동 연결 시작
start_rdp() {
msg_info "RDP 자동 연결을 시작합니다..."
# 이미 실행 중인지 확인
if systemctl is-active getty@tty1.service >/dev/null 2>&1; then
msg_warn "RDP 자동 연결이 이미 활성화되어 있습니다."
return 0
fi
# getty 서비스 활성화
systemctl unmask getty@tty1.service >/dev/null 2>&1 || true
systemctl enable getty@tty1.service >/dev/null 2>&1
systemctl start getty@tty1.service
msg_ok "RDP 자동 연결이 시작되었습니다."
# 연결 상태 확인 (최대 10초 대기)
msg_info "RDP 연결을 확인하는 중..."
for i in {1..10}; do
sleep 1
if pgrep -f "xfreerdp3.*$RDP_SERVER" >/dev/null 2>&1; then
msg_ok "RDP 연결이 성공적으로 설정되었습니다."
return 0
fi
echo -n "."
done
echo ""
msg_warn "RDP 연결 확인에 시간이 걸리고 있습니다. 로그를 확인하세요:"
echo " tail -f /home/$LOCAL_USER/rdp.log"
echo " tail -f /home/$LOCAL_USER/rdp-error.log"
}
# RDP 자동 연결 중지
stop_rdp() {
msg_info "RDP 자동 연결을 중지합니다..."
# RDP 프로세스 종료
if pgrep -f "xfreerdp3" >/dev/null 2>&1; then
msg_info "RDP 연결을 종료하는 중..."
pkill -f "xfreerdp3" 2>/dev/null || true
sleep 2
fi
# X 서버 종료
if pgrep -f "Xorg.*tty1" >/dev/null 2>&1; then
msg_info "X 서버를 종료하는 중..."
pkill -f "Xorg.*tty1" 2>/dev/null || true
sleep 2
fi
# getty 서비스 중지 및 비활성화
systemctl stop getty@tty1.service 2>/dev/null || true
systemctl disable getty@tty1.service 2>/dev/null || true
msg_ok "RDP 자동 연결이 중지되었습니다."
# 프로세스 확인
if ! pgrep -f "xfreerdp3" >/dev/null 2>&1; then
msg_ok "모든 RDP 프로세스가 정상적으로 종료되었습니다."
else
msg_warn "일부 RDP 프로세스가 아직 실행 중일 수 있습니다."
fi
}
# RDP 자동 연결 재시작
restart_rdp() {
msg_info "RDP 자동 연결을 재시작합니다..."
stop_rdp
sleep 3
start_rdp
}
# 로그 보기
show_logs() {
echo -e "${CYAN}=== RDP 로그 (최근 20줄) ===${NC}"
if [ -f "/home/$LOCAL_USER/rdp.log" ]; then
tail -20 "/home/$LOCAL_USER/rdp.log" 2>/dev/null || echo "로그 파일을 읽을 수 없습니다."
else
echo "로그 파일이 없습니다."
fi
echo ""
echo -e "${CYAN}=== RDP 에러 로그 (최근 10줄) ===${NC}"
if [ -f "/home/$LOCAL_USER/rdp-error.log" ]; then
tail -10 "/home/$LOCAL_USER/rdp-error.log" 2>/dev/null || echo "에러 로그 파일을 읽을 수 없습니다."
else
echo "에러 로그 파일이 없습니다."
fi
}
# 메인 함수
main() {
# root 권한 확인
if [ "$EUID" -ne 0 ]; then
msg_error "이 스크립트는 root 권한으로 실행해야 합니다."
fi
case "${1:-}" in
"start")
start_rdp
echo ""
check_status
;;
"stop")
stop_rdp
echo ""
check_status
;;
"status")
check_status
;;
"restart")
restart_rdp
echo ""
check_status
;;
"logs")
show_logs
;;
"help"|"-h"|"--help")
show_help
;;
*)
echo -e "${RED}잘못된 명령입니다.${NC}"
echo ""
show_help
exit 1
;;
esac
}
# 스크립트 실행
main "$@"