HOW TO: Run Apple’s Gorgeous Aerial Screensavers on Linux

 

 

I showed you how to run Apple TV’s gorgeous aerial screensavers on your Mac and Windows machine. Now it’s time to make them run on a Linux machine thanks to xscreensaver-aerial.

FEATURES

  • 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.

 

DEPENDENCIES

  • coreutils
  • mpv
  • wget
  • xscreensaver

 

INSTALLATION

1. Install the dependencies if missing

2. Now you have multiple options, depending on the distro that you’re running and if you want 2K or 4K videos.

If you’re on Arch or Arch-based distro, you can install xscreensaver-aerial from AUR, which will install everything you need.

 

If you’re running other distros…. open up a terminal window, run git clone https://github.com/graysky2/xscreensaver-aerial.git and change the working directory with cd xscreensaver-aerial

 

Now, you can choose to install the 2K videos or 4K videos. From the clonned repo…

  • For 2K videos you will need to copy atv4-2k.sh to /usr/lib/xscreensaver/atv4-2k and make it executable by running: sudo cp atv4-2k.sh /usr/lib/xscreensaver/atv4-2k && chmod +x /usr/lib/xscreensaver/atv4-2k
  • For 4K videos you will need to copy atv4-4k.sh to /usr/lib/xscreensaver/atv4-4k and make it executable by running:sudo cp atv4-4k.sh /usr/lib/xscreensaver/atv4-4k && chmod +x /usr/lib/xscreensaver/atv4-4k
  • If you want both 2K and 4K videos, just run both commands

 

4. Run xscreensaver and exit to create a hidden .xscreensaver file in your home directory.

5. Now using your favorite text editor you will need to edit .xscreensaver and, at the end of the screen saver list, add "ATV4-2k" atv4-2k \n\ for 2K videos or "ATV4-4k" atv4-4k \n\ for 4K videos

 

6. Done. Maybe, continue reading…

 

 

DOWNLOADING VIDEOS LOCALLY

Every single time the screensaver is running, you will connect to Apple’s servers and download the video. To fix this, you can download the videos locally.

NOTE: 2K videos require approx 16.3 GB of space while 4K videos will require approx. 32 GB of space

If you’re running Arch or an Arch based distro, you can easily download the videos by install aerial-2k-videos or aerial-4k-videos from the AUR.

 

If you’re running other distros:

1. Open terminal and run sudo mkdir -s /opt/ATV4/

2. Change directory to /opt/ATV4/ with cd /opt/ATV4/

3. Create a new file called download.sh with sudo touch download.sh

4. Now edit the file. For 2K videos you can use this script:

code>
#!/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

 

 

For 4K videos, you can use this script:

code>

#!/bin/bash
# run this from /opt/ATV4/ which you created and assigned 755 premissions manually
fourk=(
    AK_A004_C012_SDR_20191217_SDR_4K_HEVC.mov
    BO_A012_C031_SDR_20190726_SDR_4K_HEVC.mov
    BO_A014_C008_SDR_20190719_SDR_4K_HEVC.mov
    BO_A014_C023_SDR_20190717_F240F3709_SDR_4K_HEVC.mov
    BO_A018_C029_SDR_20190812_SDR_4K_HEVC.mov
    comp_1223LV_FLARE_v21_SDR_PS_FINAL_20180709_F0F5700_SDR_4K_HEVC.mov
    comp_A001_C004_1207W5_v23_SDR_FINAL_20180706_SDR_4K_HEVC.mov
    comp_A006_C003_1219EE_CC_v01_SDR_PS_FINAL_20180709_SDR_4K_HEVC.mov
    comp_A007_C017_01156B_v02_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_A008_C007_011550_CC_v01_SDR_PS_FINAL_20180709_SDR_4K_HEVC.mov
    comp_A009_C001_010181A_v09_SDR_PS_FINAL_20180725_SDR_4K_HEVC.mov
    comp_A012_C014_1223PT_v53_SDR_PS_FINAL_20180709_F0F8700_SDR_4K_HEVC.mov
    comp_A013_C012_0122D6_CC_v01_SDR_PS_FINAL_20180709_SDR_4K_HEVC.mov
    comp_A083_C002_1130KZ_v04_SDR_PS_FINAL_20180725_SDR_4K_HEVC.mov
    comp_A103_C002_0205DG_v12_SDR_FINAL_20180706_SDR_4K_HEVC.mov
    comp_A105_C003_0212CT_FLARE_v10_SDR_PS_FINAL_20180711_SDR_4K_HEVC.mov
    comp_A108_C001_v09_SDR_FINAL_22062018_SDR_4K_HEVC.mov
    comp_A114_C001_0305OT_v10_SDR_FINAL_22062018_SDR_4K_HEVC.mov
    comp_C001_C005_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_C003_C003_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_C004_C003_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_CH_C002_C005_PSNK_v05_SDR_PS_FINAL_20180709_SDR_4K_HEVC.mov
    comp_CH_C007_C004_PSNK_v02_SDR_PS_FINAL_20180709_SDR_4K_HEVC.mov
    comp_CH_C007_C011_PSNK_v02_SDR_PS_FINAL_20180709_SDR_4K_HEVC.mov
    comp_DB_D008_C010_PSNK_v21_SDR_PS_20180914_F0F16157_SDR_4K_HEVC.mov
    comp_GL_G002_C002_PSNK_v03_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_GMT026_363A_103NC_E1027_KOREA_JAPAN_NIGHT_v17_SDR_FINAL_25062018_SDR_4K_HEVC.mov
    comp_GMT110_112NC_364D_1054_AURORA_ANTARTICA__COMP_FINAL_v34_PS_SDR_20181107_SDR_4K_HEVC.mov
    comp_GMT306_139NC_139J_3066_CALI_TO_VEGAS_v07_SDR_FINAL_22062018_SDR_4K_HEVC.mov
    comp_GMT307_136NC_134K_8277_NY_NIGHT_01_v25_SDR_PS_20180907_SDR_4K_HEVC.mov
    comp_GMT308_139K_142NC_CARIBBEAN_DAY_v09_SDR_FINAL_22062018_SDR_4K_HEVC.mov
    comp_GMT312_162NC_139M_1041_AFRICA_NIGHT_v14_SDR_FINAL_20180706_SDR_4K_HEVC.mov
    comp_GMT314_139M_170NC_NORTH_AMERICA_AURORA__COMP_v22_SDR_20181206_v12CC_SDR_4K_HEVC.mov
    comp_GMT329_113NC_396B_1105_CHINA_v04_SDR_FINAL_20180706_F900F2700_SDR_4K_HEVC.mov
    comp_GMT329_113NC_396B_1105_ITALY_v03_SDR_FINAL_20180706_SDR_4K_HEVC.mov
    comp_GMT329_117NC_401C_1037_IRELAND_TO_ASIA_v48_SDR_PS_FINAL_20180725_F0F6300_SDR_4K_HEVC.mov
    comp_H004_C007_PS_v02_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_H004_C009_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_H005_C012_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_H007_C003_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_HK_H004_C001_PSNK_DENOISE_v14_SDR_PS_FINAL_20180731_SDR_4K_HEVC.mov
    comp_HK_H004_C008_PSNK_v19_SDR_PS_20180914_SDR_4K_HEVC.mov
    comp_HK_H004_C010_PSNK_v08_SDR_PS_20181009_SDR_4K_HEVC.mov
    comp_L007_C007_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_L010_C006_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_LA_A005_C009_PSNK_ALT_v09_SDR_PS_201809134_SDR_4K_HEVC.mov
    comp_LA_A006_C008_PSNK_ALL_LOGOS_v10_SDR_PS_FINAL_20180801_SDR_4K_HEVC.mov
    comp_LA_A008_C004_ALTB_ED_FROM_FLAME_RETIME_v46_SDR_PS_20180917_SDR_4K_HEVC.mov
    comp_LW_L001_C003__PSNK_DENOISE_v04_SDR_PS_FINAL_20180803_SDR_4K_HEVC.mov
    comp_LW_L001_C006_PSNK_DENOISE_v02_SDR_PS_FINAL_20180709_SDR_4K_HEVC.mov
    comp_N003_C006_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_N008_C009_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    CR_A009_C007_SDR_20191113_SDR_4K_HEVC.mov
    DB_D001_C001_4K_SDR_HEVC.mov
    DB_D001_C005_4K_SDR_HEVC.mov
    DB_D002_C003_4K_SDR_HEVC.mov
    DB_D011_C009_4K_SDR_HEVC.mov
    DL_B002_C011_SDR_20191122_SDR_4K_HEVC.mov
    FK_U009_C004_SDR_20191220_SDR_4K_HEVC.mov
    g201_AK_A003_C014_SDR_20191113_SDR_4K_HEVC.mov
    g201_CA_A016_C002_SDR_20191114_SDR_4K_HEVC.mov
    g201_TH_803_A001_8_SDR_20191031_SDR_4K_HEVC.mov
    g201_TH_804_A001_8_SDR_20191031_SDR_4K_HEVC.mov
    g201_WH_D004_L014_SDR_20191031_SDR_4K_HEVC.mov
    GL_G002_C002_4K_SDR_HEVC.mov
    GL_G004_C010_4K_SDR_HEVC.mov
    HK_H004_C001_4K_SDR_HEVC.mov
    HK_H004_C008_4K_SDR_HEVC.mov
    HK_H004_C010_4K_SDR_HEVC.mov
    HK_H004_C013_4K_SDR_HEVC.mov
    KP_A010_C002_SDR_20190717_SDR_4K_HEVC.mov
    LA_A005_C009_4K_SDR_HEVC.mov
    LA_A006_C008_4K_SDR_HEVC.mov
    LW_L001_C006_4K_SDR_HEVC.mov
    MEX_A006_C008_SDR_20190923_SDR_4K_HEVC.mov
    PA_A001_C007_SDR_20190717_SDR_4K_HEVC.mov
    PA_A002_C009_SDR_20190730_ALT01_SDR_4K_HEVC.mov
    PA_A004_C003_SDR_20190719_SDR_4K_HEVC.mov
    PA_A010_C007_SDR_20190717_SDR_4K_HEVC.mov
    RS_A008_C010_SDR_20191218_SDR_4K_HEVC.mov
    SE_A016_C009_SDR_20190717_SDR_4K_HEVC.mov
    DB_D011_C010_4K_SDR_HEVC.mov
    HK_B005_C011_4K_SDR_HEVC.mov
    LA_A009_C009_4K_SDR_HEVC.mov
    LA_A011_C003_4K_SDR_HEVC.mov
    comp_A015_C018_0128ZS_v03_SDR_PS_FINAL_20180709__SDR_4K_HEVC.mov
    comp_GL_G004_C010_PSNK_v04_SDR_PS_FINAL_20180709_SDR_4K_HEVC.mov
    comp_GL_G010_C006_PSNK_NOSUN_v12_SDR_PS_FINAL_20180709_SDR_4K_HEVC.mov
    comp_H012_C009_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_HK_B005_C011_PSNK_v16_SDR_PS_20180914_SDR_4K_HEVC.mov
    comp_L004_C011_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_L012_c002_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_LA_A006_C004_v01_SDR_FINAL_PS_20180730_SDR_4K_HEVC.mov
    comp_LA_A009_C009_PSNK_v02_SDR_PS_FINAL_20180709_SDR_4K_HEVC.mov
    comp_LA_A011_C003_DGRN_LNFIX_STAB_v57_SDR_PS_20181002_SDR_4K_HEVC.mov
    comp_N008_C003_PS_v01_SDR_PS_20180925_SDR_4K_HEVC.mov
    comp_N013_C004_PS_v01_SDR_PS_20180925_F1970F7193_SDR_4K_HEVC.mov
    comp_CH_C007_C011_PSNK_v02_SDR_PS_FINAL_20180709_SDR_4K_HEVC.mov
)

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

 

5. Now save the script, make it executable with sudo chmod +x /opt/ATV4/download.sh and then run it with sudo /opt/ATV4/download.sh. The script will begind downloading the videos files which will take a while depending on your bandwith.

 

USAGE

Once everything is set in place, you will need to configure xscreensaver to run just the Aerial screensaver.

1. Run xscreensaver-demo. When/if prompted, launch the daemon

2. Change the Mode to Only One Screen Saver and then select the ATV4-2k or ATV4-4k. Set your Blank After and Cycle After settings.

 

3. Now you can either preview the screensaver to make sure it’s working or close the configuration window.

4. Add xscreensaver to startup applications. To do that, cd to /etc/xdg/autostart/, create a file called aerial.desktop ( or whatver you want to name it ). The file should contain:

[Desktop Entry]
Name=Screensaver
Type=Application
Exec=xscreensaver -nosplash

5. Enjoy!

 

Fore more info and troubleshooting check out the official project page on GitHub.