워드프레스 복구

설치하여 사용하던 워드프레스가 해킹을 당해서 wordpress.com으로 이주를 했다가 다시 자체 호스팅으로 자리를 옮겼다. 매일 백업이 되고 있어서 수월하게 진행한 것 같다.

여기를 보면 내가 겪은 증상이 동일하게 설명이 되어있다. 워드프레스 디렉토리 안에 다수의 .bt 파일이 생성되어있었고, 구글 서치콘솔에서 확인해보면 이상한 링크들이 삽입되어 나오는 것을 확인할 수 있었다.

grep -nr get_data_ya *

위 커맨드로 찾아보니 wp-config.php 파일에 들어있었다. config 파일이 이상하게 변경되어 있었던 것을 모르고 wordpress 새로 설치, wp-config.php 복사하여 실행해왔으니… 계속 이상할 수 밖에.

wordpress.com에 상주하는 것도 나쁘진 않으나, 플러그인 설치 불가, 테마 설치 불가라 wordpress의 장점을 살릴 수 없어서 다시 호스팅하기로 결정…

라즈베리파이 배포판 업그레이드 (jessie -> stretch)

라즈베리파이에 워드프레스를 설치하여 이 페이지를 운용중이다. 언제부터인가 워드프레스를 업데이트 하려면 php 버전 7 이상이 필요하다며 업데이트가 안되었다. 시간이 좀 있어서 php7을 설치해보기로 했다.

좀 검색을 해보니 지금 사용하는 jessie 배포판은 좀 오래된 버전으로 php5를 포함하고있다. 최신판인 stretch를 설치하면 php7을 포함하므로 자연스럽게 업그레이드가 될 것 같아서 배포판 업그레이드를 하기로 결정했다.

Raspberry Pi - Raspbian-Update "Jessie" to "Stretch"
Upgrade Raspbian “Stretch”

배포판 업그레이드는 https://www.datenreise.de/en/raspberry-pi-raspbian-update-update-jessie-to-stretch/ 페이지를 보면서 따라가면 별 문제 없이 할 수 있다. 몇 가지 패키지에 문제가 있었는데 사용하지 않는 패키지라 지워버리고 진행하니 문제가 없었다.

배포판 업그레이드 후 첫 번째 문제는 php5가 남아있다는 것이다. phpinfo를 보니 php5가 출력이 되었다. php5를 지우고 php7관련 패키지들을 다시 설치하여 php7으로 넘어갈 수 있었다. php7.0-pdm 패키지가 설치되면서 mysql, apache등이 연동이 되었던 것 같다.

이렇게 php7이 설치되니까 워드프레스도 자연스럽게 업데이트가 되어 잘 동작했다.

그런데 따로 만들어둔 페이지들이 하나도 동작하지 않았다. 좀 찾아보니 mysql_* 함수들을 mysqli_* 함수들로 변경해야 한다고. 그래서 일일이 찾아서 바꿔주니 에러는 나지 않았는데 쿼리 결과가 NULL이 리턴되었다. mysqli_query 함수를 찾아보니 mysqli 인자를 필수로 넘겨줘야 하는 것 같았다. mysqli_query($query) -> mysqli_query($conn, $query)로 변경해주니 쿼리 결과가 제대로 넘어왔다.

이걸 일일이 다 바꿔주는 방법밖에 없는건지 모르겠지만 일단 급하니 하나하나 바꿔줘야 할 듯… 여튼 라즈베리파이의 배포판을 업그레이드하였으니 큰 일 하나 해낸 듯.. 🙂

라즈베리파이 1 키오스크 모드

기존에 사용하던 라즈베리파이가 어느날부턴가 부팅이 되지 않아 확인해보니 SD카드가 깨졌다. 다시 파티션하고 포멧해보려 해도 할 수 없다며 에러가 출력된다.

할 수 없이 다시 만들어야 해서 이것 저것 다시 찾아보게 되어 여기에 정리를 해 둔다. 설정이 완료되면 SD 카드를 백업해 두고 나중에 다시 사용할 수 있도록 해야 할 것 같다.

FullPageOS 설치

설치해봤으나 커널 패닉이 뜨면서 부팅이 되지 않는다. 문서를 좀 읽어보니 라즈베리파이 1은 지원하지 않는다.

라즈베리파이 2 이상을 사용한다면 이게 가장 간단한 방안이 아닐까 싶다. boot 파티션의 파일들을 통해서 네트워크 설정, 웹 페이지 설정이 가능하다.

Jessie Lite 설치

lightDM 등 가볍게 X 환경을 설치한 후 chromium-browser를 설치하려했는데 apt-get을 통해서는 설치할 수가 없었다. 수동 설치 방안이 있는 것 같았으나 일이 복잡해질 것 같아서 패스.

Jessie Full 버전 설치

PIXEL 데스크탑 환경이 포함되어있는 이미지를 다운로드하여 설치했다. 기본적으로 chromium-browser가 설치되어있어서 자동으로 실행되게 하기만 하면 된다.

이미지를 SD카드에 풀어낸 후 부팅을 한 후 먼저 WiFi 설정을 한다. 유선을 사용한다면 별로 필요없을 것 같고, 무선랜을 사용한다면 /etc/wpa_supplicant/wpa_supplicant.conf 파일에 다음과 같이 추가해준다.

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
 
network={
    ssid="ssid name"
    psk="password"
    key_mgmt=WPA-PSK
}

화면을 보니 full screen으로 출력이 안된다. 강제로 1920×1080으로 출력하도록 /boot/config.txt를 다음과 같이 수정한다.

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=2
hdmi_mode=82

chromium-browser를 실행해보면 한글이 깨져나오는데 아래와 같이 ttf-unfonts-core를 설치해준다.

$ sudo apt-get install ttf-unfonts-core

그다음 마우스 커서를 없애기 위해 unclutter 패키지를 설치한다.

$ sudo apt-get install unclutter

이제 chromium-browser가 자동으로 실행되도록 설정한다. ~/.config/lxsession/LXDE-pi/autostart 파일을 열어서 아래 라인을 추가한다. screen save 관련 옵션을 코멘트 처리하거나 지운다.

@xset s off
@xset s noblank
@xset -dpms

@chromium-browser --noerrdialogs --kiosk --incognito http://page.to/show

이제 재부팅 후 제대로 나오는지 확인한다. 제대로 페이지가 출력이 되면, SD카드를 백업한다. 다시 SD카드에 문제가 생기면 백업해둔 이미지를 SD카드에 풀어넣으면 된다.

$ diskutil unmountDisk /dev/disk# (#은 SD카드 번호)
$ sudo dd bs=1m if=/dev/disk# of=./pi1.img

혹시나 싶어 SD카드를 Lock 걸고 켜봤는데 그래도 잘 동작한다. Lock을 걸어두고 쓰면 더 오래 쓸 수 있지 않을까 싶어서 걸어두기로..

워드프레스 한글 파일 링크 깨지는 이슈

최근 워드프레스에 업로드한 이미지 파일들이 엑스박스 처리되어 브라우저 화면에 나타나지 않는 현상이 발생하였다. 파일을 업로드한 뒤 바로 글을 보면 문제가 없는데 나중에 보면 이상하게 깨져나타나는 것이었다. 결론은 크롬에서 업로드한 파일에 한글이 들어있으면 사파리 브라우저에서 안보인다는 것이다.

라즈베리파이에 서버를 구축하여 운영하면서 나타나는 문제인 것 같아서 서버 설정에 문제가 있나 여러모로 검토를 해 보았으나 최근 배포되는 서버 이미지는 당연히 UTF-8을 지원하고, 설치한 APM도 UTF-8을 기본적으로 사용하도록 되어있었다.

그런데 희안하게 브라우저마다 다른 현상이 나타났다. 사파리 브라우저에서는 깨져나오는데, 크롬 브라우저에서는 제대로 나오는 것이 아닌가. 혹시나 싶어 Windows에서 한번 봤는데, 크롬, 에지, 인터넷 익스플로러 모두 제대로 나왔다. 음 이건 사파리의 버그인가…

wp-content 디렉토리를 살펴봤다. 주로 안보이는 이미지는 스크린샷-어쩌구.png 식의 이미지파일들로 맥에서 화면 캡춰하면 생기는 디폴트 이름들이다. 이 파일들이 크롬에서는 보이는데, 사파리에서는 404 에러가 뜨는 것이었다.

좀 더 확인해보니 사파리에서 업로드한 파일이름과 크롬에서 올리는 파일 이름이 서버에 다르게 저장된다는 것을 알았다. 사파리에서 업로드한 이미지들은 사파리에서도 잘 보이고 크롬에서도 잘 보인다. 그런데 크롬에서 업로드한 이미지는 크롬에서는 잘 보이는데 사파리에서는 404에러가 뜬다. (확인해본 다른 브라우저들은 모두 제대로 나온다.)

집에서는 사파리를 주로 쓰고, 회사에서는 업무용으로 크롬을 주로 쓰고있는데, 회사에서 작성한 포스트를 집에서 확인해볼 때 문제가 나왔던 것이었다.

서버를 좀 들여다보니, 업로드한 파일들이 똑같이 스크린샷 어쩌구란 이름으로 나오지만 정열되는 순서가 다르다. 즉 화면에는 스크린샷이라고 동일하게 보이지만, 사파리에서 업로드한 파일들은 알파벳 뒤에, 크롬에서 업로드한 파일들은 알파벳 앞에 나온다. 동일하게 보이지만 다른 파일인 것이다.

두 그룹으로 나뉜 스크린샷 파일들

추측해보건데 사파리에서는 맥의 파일시스템의 이름을 그대로 업로드하여 저장하는 것 같다. 맥에서는 풀어쓰기 방식의 유니코드를 사용하는데 (이름은 잘 기억이..) 이것이 그대로 Linux 서버에 저장되는 듯 싶다. 크롬에서는 UTF-8 변환을 하여 한글을 저장하는 것 같고..

풀어쓰기 형태로 저장된 스크린샷과 모아쓰기 형태로 저장된 스크린샷이 화면상에는 동일하게 보이지만 unicode가 달라서 정열되는 순서가 다르다.

왜 다르게 저장되는지 분석을 해보려다 이건 내가 할 일이 아닌것 같아서 한글 이름을 변환해서 업로드 해 주는 플러그인을 쓰기로 했다. uploading downloading non-latin filename 이라는 플러그인인데, 깔끔하고 괜찮다. 설치하고 활성화해 두기만 하면 한글이 들어간 이미지를 업로드할 때 자동으로 숫자로 된 파일로 바꿔준다.

아래 첨부 이미지는 크롬브라우저에서 업로드한 이미지 파일이다. 사파리에서는 안보이는데 다른 브라우저에서는 보인다.

시스템 환경설정

여튼 희안하다. 왜 이런건지 누가 좀… 사파리 설정 문젠가?? -_-

라즈베리파이 부팅시 FTP통해 IP 알림 받기

라즈베리파이를 public 망에 물려서 공인 IP를 받아 쓰기 시작했다. 공인 IP를 받으면 어디서든 제약 없이 접근할 수 있으니 따로 서버 호스팅을 하는 것과 동일한 효과를 볼 수 있다. 공인 IP에 도메인을 연결해두면 도메인으로도 접근이 잘 된다.

라즈베리파이는 입출력 장치 없이 사용하는 서버이므로 부팅시 IP를 알려주는 방법이 필요해서 찾아봤는데, 처음 검색된 것이 gmail smtp를 이용하여 메일로 알림을 주는 것이다.

이것이 잘 되면 좋을텐데, 구글에서 비 보안 어플리케이션이 접근한다면서 보안 경고를 보내온다. 좀 꺼림직하여 다른 방법을 찾아봤다.

다음으로 시도해본것이 scp를 이용하여 ip를 다른 서버에 알려주는 것이다. authorized_keys도 입력을 해 두고 비번 없이 scp가 되도록 설정을 해 두었는데 이상하게 잘 안된다. pi 계정, root 계정 모두 pub key를 등록해봐도 안된다. rc.local에 스크립트를 추가하는 방식이었는데 될 것 같은데 안되는…

다음으로 시도해본게 NAS에 ftp로 ip 주소를 전송하는 방법이다. 라즈베리파이가 부팅하면서 ip.html 이라는 파일을 만들고 이를 ftp를 이용하여 NAS에 전송한다. NAS에 http로 접근하면 해당 주소를 web으로 바로 확인할 수 있다. cron 작업에 하루에 한번 IP를 리포트하도록 설정을 했다. 깔끔하게 동작한다.

pi@raspberrypi:~ $ cat startup.sh 
#!/bin/bash
HOST='nas.server.net'
USER='nas_ftp_id'
PASSWD='nas_password'
FILE='ip.html'

cd /home/pi

hostname -I > $FILE
date >> $FILE

ftp -n $HOST << END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd /web
put $FILE
quit
END_SCRIPT

위 스크립트는 ip address를 ip.html 파일에 기록한 후 ftp로 server로 전송하는 스크립트이다. 본인 상황에 맞게 수정하여 사용하면 될 것 같다.

부팅시 위 스크립트를 실행하기 위해 rc.local 파일에 다음 라인을 추가했다.

pi@raspberrypi:~ $ cat /etc/rc.local 
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
  /home/pi/startup.sh # 라인 추가
fi

exit 0

하루에 한 번 실행되도록 cron에도 추가해줬다.

pi@raspberrypi:~ $ crontab -l
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
0 4 * * * /home/pi/startup.sh

라즈베리파이 모니터 없이 최소 설치

호스팅을 직접 라즈베리파이에 해 보면 어떨까 싶은 마음에 사용하지 않고있던 라즈베리파이2를 꺼내보았다. 웹 서버를 운용할 것이라서 데스크탑 환경은 필요가 없기 때문에 무작정 RASPBIAN JESSIE LITE 버전을 다운로드하여 MicroSD 카드에 이미지를 풀어냈다.

시행 착오 및 검색을 통해 부팅 전 다음과 같은 사항이 필요하다는 것을 알아냈다.

Raspberry Pi

고정 IP

모니터, 키보드는 연결하지 않을 것이므로 항상 동일한 IP를 갖도록 하는 것이 필요했다. boot 파티션에 보면 cmdline.txt 라는 파일이 있는데, 이를 열어 ip=xxx.xxx.xxx.xxx를 입력해주면 된다.

pi@raspberrypi:/boot $ cat cmdline.txt 
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes ip=10.0.1.100 rootwait

SSH enable

기본적으로 LITE 이미지는 ssh가 disable 되어있다. 이를 enable 하기 위해서는 boot 파티션에 ssh 라는 이름의 빈 파일을 넣어주면 된다. touch ssh 식으로 하나 만들어준다.

위와 같이 두가지 설정을 해 주면 ssh를 통해서 라즈베리파이에 접속할 수 있다. 기본 계정은 pi/raspberry 이다. 접속 후 패스워드를 변경해주고 apt-get update/upgrade를 먼저 해 둔다.

이제 APM을 설치하여 웹서버를 운용하면 된다.

Apple TV 구입 후 소감

이걸 사야되나 말아야되나 한참을 고민하다가 에이 그냥 한번 사보자 생각이 들어 구매하게 되었다. 역시나 국내에서는 컨텐츠가 없어서 사용하는데 그리 좋진 못한 것 같다. 영어 되고 영화/드라마 많이 본다면 쓸만도 하겠지만..

Apple TV
Apple TV

이 녀석은 바즈베리파이 대신 TV 밑에 설치가 되었다. 기존 라즈베리파이는 홈 게이트웨이 역할(SSH 서버) 및 KODI를 통한 미디어 서버 역할을 담당해왔는데, 이제 Apple TV가 그 자리를 차지하게 되었다.

Apple TV에서는 기본적으로 iCloud를 통한 사진, 음악이 공유가 된다. iCloud 로그인 후 홈 공유만 켜면 자동으로 Apple TV에서 사용 가능하다.

아이폰에서 Remote 앱을 사용하면 Apple TV를 콘트롤 할 수 있다. 처음에 리모톤으로 커서를 움직여가며 타이핑을 했는데, Remote 앱을 쓰면 아이폰 키보드로 타이핑해 넣을 수 있다.

Apple TV에서 KODI를 사용하진 못한다. 대신 PLEX를 사용할 수 있다. iMac에 Plex Media Server를 설치해두면 Apple TV에서 미디어 시청이 가능하다. KODI를 대신하기에 충분한 기능을 가졌다고 생각이 든다. 한가지 좋은 점은 Browser를 통해서 어디서든 접속 가능하다는 것이다. 모바일에서도 가능하지만 앱이 유료인것이.. 쓸 일은 없을 것 같다.

그리고 미디어를 소비하는 다른 방법은 Netflix를 이용하는 것이다. 집에있는 삼성 블루레이 플레이어에도 Netflix가 있어서 사용해봤는데, 한국어를 지원하지 않는다. 참 어이가 없었는데, Apple TV에서 내려받은 Netflix 앱은 한국어를 깔끔하게 지원을 한다. UI뿐 아니라 자막도 깔끔하게 나온다. 그러나 유료로 Netflix를 사용하진 않을 것이기 때문에 일단은 접어두기로..

그 외 게임 등을 설치해서 할 수 있지만, 킬러 앱이 있는것 같진 않다. Apple TV 발표 때 나왔던 길건너 친구들 설치해서 한번 해본 정도..

라즈베리파이에서 불안전했던 AirPlay도 이젠 깔끔하게 되고..

당장은 많이 쓰진 않을 것 같지만, 여튼 애플 생태계의 한 축을 만들어두었다는 것으로도 일단 만족. 🙂

라즈베리파이 HDMI 해상도 강제 설정

HDMI 케이블로 연결을 하면 보통 최적의 해상도로 화면에 출력을 해 주는데, 특별한 경우(크게 보고 싶다거나, 작게 보고싶다거나.. 등) 해상도를 조정했으면 하는 생각이 들 때가 있다. 아니면 최적의 해상도가 있는데 이상한 해상도로 나온다거나 하는..

config.txt파일에 HDMI 모드 값을 변경하면 해결할 수 있다.

나같은 경우는 HDMI-DVI 케이블로 모니터를 연결했더니 1920×1080으로 설정되는게 아니라 1680×1050로 자동 설정이 되었다. 1920으로 어떻게 바꿔야 되나 한참을 찾아 해결 방법을 알게되었다.

$ tvservice -d edid.dat
Written 128 bytes to edid.dat

$ edidparser edid.dat > edid.txt

$ cat edid.txt
Enabling fuzzy format match...
Parsing edid.dat...
HDMI:EDID version 1.3, 0 extensions, screen size 48x27 cm
HDMI:EDID features - videodef 0x80 standby suspend active off; colour encoding:RGB444|YCbCr422; sRGB is not default colourspace; preferred format is native; does not support GTF
HDMI:EDID found monitor range descriptor tag 0xfd
HDMI:EDID monitor range offsets: V min=0, V max=0, H min=0, H max=0
HDMI:EDID monitor range: vertical is 56-75 Hz, horizontal is 30-83 kHz, max pixel clock is 150 MHz
HDMI:EDID monitor range does not support GTF
HDMI:EDID found monitor name descriptor tag 0xfc
HDMI:EDID monitor name is W2261
HDMI:EDID failed to find a matching detail format for 1920x1080p hfp:48 hs:32 hbp:80 vfp:3 vs:5 vbp:23 pixel clock:138 MHz
HDMI:EDID calculated refresh rate is 60 Hz
HDMI:EDID guessing the format to be 1920x1080p @60 Hz
HDMI:EDID found preferred CEA detail timing format: 1920x1080p @ 60 Hz (16)
HDMI:EDID found CEA detail timing format: 1920x1080p @ 60 Hz (16)
HDMI:EDID established timing I/II bytes are A7 6B 80
HDMI:EDID found DMT format: code 4, 640x480p @ 60 Hz in established timing I/II
HDMI:EDID found DMT format: code 6, 640x480p @ 75 Hz in established timing I/II
HDMI:EDID found DMT format: code 8, 800x600p @ 56 Hz in established timing I/II
HDMI:EDID found DMT format: code 9, 800x600p @ 60 Hz in established timing I/II
HDMI:EDID found DMT format: code 11, 800x600p @ 75 Hz in established timing I/II
HDMI:EDID found DMT format: code 16, 1024x768p @ 60 Hz in established timing I/II
HDMI:EDID found DMT format: code 18, 1024x768p @ 75 Hz in established timing I/II
HDMI:EDID found DMT format: code 36, 1280x1024p @ 75 Hz in established timing I/II
HDMI:EDID standard timings block x 8: 0xB300 8180 8140 714F 0101 0101 0101 0101 
HDMI:EDID found DMT format: code 58, 1680x1050p @ 60 Hz (16:10) in standard timing 0
HDMI:EDID found DMT format: code 35, 1280x1024p @ 60 Hz (5:4) in standard timing 1
HDMI:EDID found DMT format: code 32, 1280x960p @ 60 Hz (4:3) in standard timing 2
HDMI:EDID found DMT format: code 21, 1152x864p @ 75 Hz (4:3) in standard timing 3
HDMI:EDID moving support for CEA mode 16 to DMT mode 82 because sink does not support HDMI
HDMI:EDID filtering formats with pixel clock > 162 MHz or h. blanking > 1023
HDMI:EDID best score mode initialised to CEA (1) 640x480p @ 60 Hz with pixel clock 25 MHz (score 0)
HDMI:EDID best score mode is now DMT (4) 640x480p @ 60 Hz with pixel clock 25 MHz (score 18432)
HDMI:EDID best score mode is now DMT (6) 640x480p @ 75 Hz with pixel clock 31 MHz (score 23040)
HDMI:EDID best score mode is now DMT (8) 800x600p @ 56 Hz with pixel clock 36 MHz (score 26880)
HDMI:EDID best score mode is now DMT (9) 800x600p @ 60 Hz with pixel clock 40 MHz (score 28800)
HDMI:EDID best score mode is now DMT (11) 800x600p @ 75 Hz with pixel clock 49 MHz (score 36000)
HDMI:EDID best score mode is now DMT (16) 1024x768p @ 60 Hz with pixel clock 65 MHz (score 47185)
HDMI:EDID best score mode is now DMT (18) 1024x768p @ 75 Hz with pixel clock 78 MHz (score 58982)
HDMI:EDID best score mode is now DMT (21) 1152x864p @ 75 Hz with pixel clock 108 MHz (score 99649)
HDMI:EDID DMT mode (32) 1280x960p @ 60 Hz with pixel clock 108 MHz has a score of 98728
HDMI:EDID best score mode is now DMT (35) 1280x1024p @ 60 Hz with pixel clock 108 MHz (score 103643)
HDMI:EDID DMT mode (36) 1280x1024p @ 75 Hz with pixel clock 135 MHz has a score of 98304
HDMI:EDID best score mode is now DMT (58) 1680x1050p @ 60 Hz with pixel clock 146 MHz (score 130840)
HDMI:EDID DMT mode (82) 1920x1080p @ 60 Hz with pixel clock 148 MHz has a score of 124416
HDMI:EDID preferred mode is updated to DMT (58) 1680x1050p @ 60 Hz with pixel clock 146250000 Hz
HDMI:EDID has only DVI support and no audio support
edid_parser exited with code 0

위의 출력 결과를 보면 best score mode가 1680x1050p이라 되어있다.. -_-

위의 값들이 지원되는 모드이므로 1920×1080을 찾아 값을 강제로 써주면 된다. DMT mode (82)번이 1920×1080으로 되어있다. DMT 모드는 hdmi group 2이고, CEA라고 나오면 이것이 HDMI group 1이다. 괄호 안의 숫자가 mode 번호이다.

따라서 아래와 같이 /boot/config.txt에 적어준다.

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=2
hdmi_mode=82

재부팅해보면 1920×1080으로 잘 나온다. 🙂