Apple TV has one of the most beautiful screen savers available. Created by John Coates what is displayed are a series of high quality drone videos taken over various locations around the world.

It wasn't long before the Aerial Screen saver was ported over to the MacOS platform.

I missed this screen saver, its very relaxing to watch while on calls.

Thankfully this is the internet and someone has ported the screensaver to an xscreensavers package for linux.

The code and instructions are found on github.

graysky2/xscreensaver-aerial
xscreensaver that randomly selects one of the Apple TV4 aerial movies - graysky2/xscreensaver-aerial

It seems that the creator of the service has also thought about what has been created

An xscreensaver that randomly selects one of the Apple TV4 HD aerial movies and plays it using mpv.
The day movies will play between the hours of 7 AM and 7 PM while the night movies will play thereafter.
No movie should repeat until all of the respective movies have cycled through once. After that, the queue will reset and continue playing in a random fashion.
No excessive HDD usage. When the display is told to sleep by xscreensaver, whatever video is currently playing will finish and another will NOT get called until the display is active again

Getting it up and running is pretty simple.

Use your package managed to install

  • coreutils
  • mpv
  • wget
  • xscreensaver

Clone the git repo locally

git clone https://github.com/graysky2/xscreensaver-aerial.git
cd xscreensaver-aerial

for the 2K video version run

cp atv4-2k.sh /usr/lib/xscreensaver/atv4-2k && chmod +x /usr/lib/xscreensaver/atv4-2k

for the 4k video version run

cp atv4-4k.sh /usr/lib/xscreensaver/atv4-4k && chmod +x /usr/lib/xscreensaver/atv4-4k

run

xscreensaver

then exit, this will create a hidden file in your home directory which you will need to edit

vi ~/.xscreensaver

at the end of the list of screen savers add

"ATV4-2k" atv4-2k \n\
2k

or

"ATV4-4k" atv4-4k \n\
4k

as an example for the 2k version

With this setup the screen saver will stream the videos it uses, if you want to download the video files to stop this

Create the folder for the video files

sudo mkdir -s /opt/ATV4/

move to that folder

cd /opt/ATV4/

On the git page above there are 2 scripts which will download either the 2k or the 4k video files, and i'd recommend copy and pasting from the git page

sudo vi /opt/ATV4/download.sh

then add

#!/bin/bash
# run this from /opt/ATV4/ which you created and assigned 755 premissions manually

#!/bin/bash

twok=(
AK_A004_C012_SDR_20191217_SDR_2K_HEVC.mov
BO_A012_C031_SDR_20190726_SDR_2K_HEVC.mov
BO_A014_C008_SDR_20190719_SDR_2K_HEVC.mov
BO_A014_C023_SDR_20190717_F240F3709_SDR_2K_HEVC.mov
BO_A018_C029_SDR_20190812_SDR_2K_HEVC.mov
comp_1223LV_FLARE_v21_SDR_PS_FINAL_20180709_F0F5700_SDR_2K_HEVC.mov
comp_A001_C004_1207W5_v23_SDR_FINAL_20180706_SDR_2K_HEVC.mov
comp_A006_C003_1219EE_CC_v01_SDR_PS_FINAL_20180709_SDR_2K_HEVC.mov
comp_A007_C017_01156B_v02_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_A008_C007_011550_CC_v01_SDR_PS_FINAL_20180709_SDR_2K_HEVC.mov
comp_A009_C001_010181A_v09_SDR_PS_FINAL_20180725_SDR_2K_HEVC.mov
comp_A012_C014_1223PT_v53_SDR_PS_FINAL_20180709_F0F8700_SDR_2K_HEVC.mov
comp_A013_C012_0122D6_CC_v01_SDR_PS_FINAL_20180709_SDR_2K_HEVC.mov
comp_A083_C002_1130KZ_v04_SDR_PS_FINAL_20180725_SDR_2K_HEVC.mov
comp_A103_C002_0205DG_v12_SDR_FINAL_20180706_SDR_2K_HEVC.mov
comp_A105_C003_0212CT_FLARE_v10_SDR_PS_FINAL_20180711_SDR_2K_HEVC.mov
comp_A108_C001_v09_SDR_FINAL_22062018_SDR_2K_HEVC.mov
comp_A114_C001_0305OT_v10_SDR_FINAL_22062018_SDR_2K_HEVC.mov
comp_C001_C005_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_C003_C003_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_C004_C003_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_CH_C002_C005_PSNK_v05_SDR_PS_FINAL_20180709_SDR_2K_HEVC.mov
comp_CH_C007_C004_PSNK_v02_SDR_PS_FINAL_20180709_SDR_2K_HEVC.mov
comp_CH_C007_C011_PSNK_v02_SDR_PS_FINAL_20180709_SDR_2K_HEVC.mov
comp_DB_D008_C010_PSNK_v21_SDR_PS_20180914_F0F16157_SDR_2K_HEVC.mov
comp_GL_G002_C002_PSNK_v03_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_GMT026_363A_103NC_E1027_KOREA_JAPAN_NIGHT_v17_SDR_FINAL_25062018_SDR_2K_HEVC.mov
comp_GMT110_112NC_364D_1054_AURORA_ANTARTICA__COMP_FINAL_v34_PS_SDR_20181107_SDR_2K_HEVC.mov
comp_GMT306_139NC_139J_3066_CALI_TO_VEGAS_v07_SDR_FINAL_22062018_SDR_2K_HEVC.mov
comp_GMT308_139K_142NC_CARIBBEAN_DAY_v09_SDR_FINAL_22062018_SDR_2K_HEVC.mov
comp_GMT312_162NC_139M_1041_AFRICA_NIGHT_v14_SDR_FINAL_20180706_SDR_2K_HEVC.mov
comp_GMT314_139M_170NC_NORTH_AMERICA_AURORA__COMP_v22_SDR_20181206_v12CC_SDR_2K_HEVC.mov
comp_GMT329_113NC_396B_1105_CHINA_v04_SDR_FINAL_20180706_F900F2700_SDR_2K_HEVC.mov
comp_GMT329_113NC_396B_1105_ITALY_v03_SDR_FINAL_20180706_SDR_2K_HEVC.mov
comp_GMT329_117NC_401C_1037_IRELAND_TO_ASIA_v48_SDR_PS_FINAL_20180725_F0F6300_SDR_2K_HEVC.mov
comp_H004_C007_PS_v02_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_H004_C009_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_H005_C012_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_H007_C003_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_HK_H004_C001_PSNK_DENOISE_v14_SDR_PS_FINAL_20180731_SDR_2K_HEVC.mov
comp_HK_H004_C008_PSNK_v19_SDR_PS_20180914_SDR_2K_HEVC.mov
comp_HK_H004_C010_PSNK_v08_SDR_PS_20181009_SDR_2K_HEVC.mov
comp_L007_C007_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_L010_C006_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_LA_A005_C009_PSNK_ALT_v09_SDR_PS_201809134_SDR_2K_HEVC.mov
comp_LA_A006_C008_PSNK_ALL_LOGOS_v10_SDR_PS_FINAL_20180801_SDR_2K_HEVC.mov
comp_LA_A008_C004_ALTB_ED_FROM_FLAME_RETIME_v46_SDR_PS_20180917_SDR_2K_HEVC.mov
comp_LW_L001_C003__PSNK_DENOISE_v04_SDR_PS_FINAL_20180803_SDR_2K_HEVC.mov
comp_LW_L001_C006_PSNK_DENOISE_v02_SDR_PS_FINAL_20180709_SDR_2K_HEVC.mov
comp_N003_C006_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_N008_C009_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
CR_A009_C007_SDR_20191113_SDR_2K_HEVC.mov
DB_D001_C001_2K_SDR_HEVC.mov
DB_D001_C005_2K_SDR_HEVC.mov
DB_D002_C003_2K_SDR_HEVC.mov
DB_D011_C009_2K_SDR_HEVC.mov
DL_B002_C011_SDR_20191122_SDR_2K_HEVC.mov
FK_U009_C004_SDR_20191220_SDR_2K_HEVC.mov
g201_AK_A003_C014_SDR_20191113_SDR_2K_HEVC.mov
g201_CA_A016_C002_SDR_20191114_SDR_2K_HEVC.mov
g201_TH_803_A001_8_SDR_20191031_SDR_2K_HEVC.mov
g201_TH_804_A001_8_SDR_20191031_SDR_2K_HEVC.mov
g201_WH_D004_L014_SDR_20191031_SDR_2K_HEVC.mov
GL_G002_C002_2K_SDR_HEVC.mov
GL_G004_C010_2K_SDR_HEVC.mov
HK_H004_C001_2K_SDR_HEVC.mov
HK_H004_C008_2K_SDR_HEVC.mov
HK_H004_C010_2K_SDR_HEVC.mov
HK_H004_C013_2K_SDR_HEVC.mov
KP_A010_C002_SDR_20190717_SDR_2K_HEVC.mov
LA_A005_C009_2K_SDR_HEVC.mov
LA_A006_C008_2K_SDR_HEVC.mov
LW_L001_C006_2K_SDR_HEVC.mov
MEX_A006_C008_SDR_20190923_SDR_2K_HEVC.mov
PA_A001_C007_SDR_20190717_SDR_2K_HEVC.mov
PA_A002_C009_SDR_20190730_ALT01_SDR_2K_HEVC.mov
PA_A004_C003_SDR_20190719_SDR_2K_HEVC.mov
PA_A010_C007_SDR_20190717_SDR_2K_HEVC.mov
RS_A008_C010_SDR_20191218_SDR_2K_HEVC.mov
SE_A016_C009_SDR_20190717_SDR_2K_HEVC.mov
DB_D011_C010_2K_SDR_HEVC.mov
HK_B005_C011_2K_SDR_HEVC.mov
LA_A009_C009_2K_SDR_HEVC.mov
LA_A011_C003_2K_SDR_HEVC.mov
comp_A015_C018_0128ZS_v03_SDR_PS_FINAL_20180709__SDR_2K_HEVC.mov
comp_GL_G004_C010_PSNK_v04_SDR_PS_FINAL_20180709_SDR_2K_HEVC.mov
comp_GL_G010_C006_PSNK_NOSUN_v12_SDR_PS_FINAL_20180709_SDR_2K_HEVC.mov
comp_H012_C009_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_HK_B005_C011_PSNK_v16_SDR_PS_20180914_SDR_2K_HEVC.mov
comp_L004_C011_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_L012_c002_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_LA_A006_C004_v01_SDR_FINAL_PS_20180730_SDR_2K_HEVC.mov
comp_LA_A009_C009_PSNK_v02_SDR_PS_FINAL_20180709_SDR_2K_HEVC.mov
comp_LA_A011_C003_DGRN_LNFIX_STAB_v57_SDR_PS_20181002_SDR_2K_HEVC.mov
comp_N008_C003_PS_v01_SDR_PS_20180925_SDR_2K_HEVC.mov
comp_N013_C004_PS_v01_SDR_PS_20180925_F1970F7193_SDR_2K_HEVC.mov
)

wget --no-clobber \
http://sylvan.apple.com/Videos/comp_GMT307_136NC_134K_8277_NY_NIGHT_01_v25_SDR_PS_20180907_SDR_2K_AVC.mov

for i in "${twok[@]}"; do
  wget --no-clobber http://sylvan.apple.com/Aerials/2x/Videos/"$i"
done

save the script and run it

sudo chmod +x /opt/ATV4/download.sh
sudo /opt/ATV4/download.sh

The script will download the video files, this could take a while depending on your bandwidth.

Once complete we will need to setup xscreensaver to run just this screensaver

Run

xscreensaver-demo

If asked launch the daemon

Within the Screensaver Preferences Dialog

Change the Mode to Only One Screen Saver

Select the ATV4-2k or ATV4-4K Screensaver and your preferred Blank after and Cycle After settings.

Either preview to check working or close the dialog box.

Finally depending on your desktop interface of choice (KDE, Gnome, XFCE etc) you will need to have xscreensaver launch at startup.

Troubleshooting

If your power settings blank the screen after 5 minutes and the screensaver is set to run at 10 minutes, don't expect to see a screensaver.

If on KDE5 you have world map set as your lock screen there seems to be a bug where when you move the mouse to get back to the screen you will see a scary window saying

loginctl unlock-session 3

Something like, but may not be exactly the same as

Follow the instructions and it will work, and don't use world clock as your KDE lock screen.