#!/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 "$@"