Update Attract Mode

Many RetroPie images are floating around that have Attract Mode installed. To update Attract Mode if you do have an image that used the RetroPie setup script to install it. Then you can simply just update it under the experimental packages menu.

Majority of the self released images are based on releases that compiled Attract Mode from source using the command line and not the RetroPie setup script. This makes getting updates for attract mode tricky if you don’t know how to update it.

You can also check out our other posts Enable SSH RetroPie and RetroPie USB Controllers List.

RetroPie Parts List

Raspberry PI 3 Model BAvailable Here(The Main Computer)
Custom Cooling CaseAvailable Here(Fanless Cooling Case)
Micro SD CardAvailable Here(Minimum of 8GB)
Power SupplyAvailable Here(Minimum 5V 2.5A)
Game ControllerAvailable Here(Awesome Controller)

How To Update Attract Mode

Follow our quick guide below to learn how to easily update Attract Mode on your system using SSH. You will not loose any of your custom settings or configurations for attract mode when updating. All of your themes and systems will be exactly the same.

Update Attract Mode

Before we update attract mode we can verify the currently installed version. Once you have used SSH to connect to your RetroPie then issue the following commands.


pi@retropie:~ $ attract -v
Attract-Mode v2.2.1 (Linux, SFML 2.3 +FontConfig +RPi +SWF)

Using FFmpeg for Audio and Video.
avcodec 57.66.108 / avformat 57.58.101 / swscale 4.3.101 / swresample 2.4.100

Shaders are not available.

After verifying the current attract mode version, kill attract mode to make sure it is not running before you update attract mode.


pi@retropie:~ $ killall -9 attract

Next we are going to remove the existing source code “develop” directory. This is the most common one we see and it is located in the Pi users home directory.


pi@retropie:~ $ rm -rf develop

Now we are going to make a fresh “develop” directory. Then enter it and clone the newest attract mode source code for us to compile and update attract mode.


pi@retropie:~ $ mkdir develop
pi@retropie:~ $ cd develop/
pi@retropie:~/develop $ git clone --depth 1 https://github.com/mickelson/attract attract

This will download the attract mode source code from Github and place it into a new directory called “attract”.


Cloning into 'attract'...
remote: Counting objects: 659, done.
remote: Compressing objects: 100% (617/617), done.
remote: Total 659 (delta 48), reused 351 (delta 24), pack-reused 0
Receiving objects: 100% (659/659), 5.25 MiB | 4.46 MiB/s, done.
Resolving deltas: 100% (48/48), done.
Checking connectivity... done.

Once finished downloading we will enter the new “attract” directory and view it’s contents just to verify the source code is there.


pi@retropie:~/develop $ cd attract/
pi@retropie:~/develop/attract $ ls
Compile.md debian Layouts.md Makefile src
config extlibs License.txt Readme.md util

Now from inside the “attract” directory, we can compile the updated attract mode source code.


pi@retropie:~/develop/attract $ make USE_GLES=1

The source code will now compile attract mode into the newest version. This process can take some time.

You also might see a few warnings, but this is typically nothing to worry about.


flags: -Wl,--export-dynamic -I/usr/include/freetype2 -DDATA_PATH=\"/usr/local/share/attract/\" -O2 -DNDEBUG -I/opt/vc/include -L/opt/vc/lib -Iextlibs/miniz -Iextlibs/audio/include -D__STDC_CONSTANT_MACROS -I/usr/local/include -I/usr/include/freetype2 -I/usr/include/AL -Iextlibs/squirrel/include -Iextlibs/sqrat/include -Iextlibs/gameswf -DFE_RPI -DUSE_GLES -DUSE_FONTCONFIG -DUSE_SWRESAMPLE
fatal: No names found, cannot describe anything.
mkdir -p obj
Compiling obj/fe_base.o...
Compiling obj/fe_util.o...
Compiling obj/fe_util_sq.o...
Compiling obj/fe_cmdline.o...
Compiling obj/fe_info.o...
Compiling obj/fe_input.o...
Compiling obj/fe_romlist.o...
Compiling obj/fe_settings.o...
Compiling obj/scraper_xml.o...
Compiling obj/scraper_general.o...
Compiling obj/scraper_net.o...
Compiling obj/fe_config.o...
Compiling obj/fe_presentable.o...
Compiling obj/fe_present.o...
Compiling obj/sprite.o...
Compiling obj/fe_image.o...
Compiling obj/fe_sound.o...
Compiling obj/fe_shader.o...
src/fe_shader.cpp: In member function ‘void FeShader::set_param(const char*, float)’:
src/fe_shader.cpp:84:34: warning: ‘void sf::Shader::setParameter(const string&, float)’ is deprecated (declared at /usr/local/include/SFML/Graphics/Shader.hpp:554) [-Wdeprecated-declarations]
m_shader.setParameter( name, x );
^
src/fe_shader.cpp: In member function ‘void FeShader::set_param(const char*, float, float)’:
src/fe_shader.cpp:93:37: warning: ‘void sf::Shader::setParameter(const string&, float, float)’ is deprecated (declared at /usr/local/include/SFML/Graphics/Shader.hpp:562) [-Wdeprecated-declarations]
m_shader.setParameter( name, x, y );
^
src/fe_shader.cpp: In member function ‘void FeShader::set_param(const char*, float, float, float)’:
src/fe_shader.cpp:102:40: warning: ‘void sf::Shader::setParameter(const string&, float, float, float)’ is deprecated (declared at /usr/local/include/SFML/Graphics/Shader.hpp:570) [-Wdeprecated-declarations]
m_shader.setParameter( name, x, y, z );
^
src/fe_shader.cpp: In member function ‘void FeShader::set_param(const char*, float, float, float, float)’:
src/fe_shader.cpp:111:43: warning: ‘void sf::Shader::setParameter(const string&, float, float, float, float)’ is deprecated (declared at /usr/local/include/SFML/Graphics/Shader.hpp:578) [-Wdeprecated-declarations]
m_shader.setParameter( name, x, y, z, w );
^
src/fe_shader.cpp: In member function ‘void FeShader::set_texture_param(const char*)’:
src/fe_shader.cpp:120:59: warning: ‘void sf::Shader::setParameter(const string&, sf::Shader::CurrentTextureType)’ is deprecated (declared at /usr/local/include/SFML/Graphics/Shader.hpp:626) [-Wdeprecated-declarations]
m_shader.setParameter( name, sf::Shader::CurrentTexture );
^
src/fe_shader.cpp: In member function ‘void FeShader::set_texture_param(const char*, FeImage*)’:
src/fe_shader.cpp:133:42: warning: ‘void sf::Shader::setParameter(const string&, const sf::Texture&)’ is deprecated (declared at /usr/local/include/SFML/Graphics/Shader.hpp:618) [-Wdeprecated-declarations]
m_shader.setParameter( name, *texture );
^
Compiling obj/fe_overlay.o...
src/fe_overlay.cpp: In member function ‘bool FeOverlay::edit_loop(std::vector<sf::Drawable*>, std::basic_string&, FeTextPrimative*)’:
src/fe_overlay.cpp:1559:34: warning: ‘void sf::Text::setColor(const sf::Color&)’ is deprecated (declared at /usr/local/include/SFML/Graphics/Text.hpp:177) [-Wdeprecated-declarations]
cursor.setColor( tp->getColor() );
^
Compiling obj/fe_window.o...
Compiling obj/tp.o...
src/tp.cpp: In member function ‘void FeTextPrimative::setColor(const sf::Color&)’:
src/tp.cpp:71:26: warning: ‘void sf::Text::setColor(const sf::Color&)’ is deprecated (declared at /usr/local/include/SFML/Graphics/Text.hpp:177) [-Wdeprecated-declarations]
m_texts[i].setColor( c );
^
src/tp.cpp: In member function ‘const sf::Color& FeTextPrimative::getColor() const’:
src/tp.cpp:76:29: warning: ‘const sf::Color& sf::Text::getColor() const’ is deprecated (declared at /usr/local/include/SFML/Graphics/Text.hpp:285) [-Wdeprecated-declarations]
return m_texts[0].getColor();
^
Compiling obj/fe_text.o...
Compiling obj/fe_listbox.o...
Compiling obj/fe_vm.o...
Compiling obj/zip.o...
Compiling obj/main.o...
src/main.cpp: In function ‘int main(int, char**)’:
src/main.cpp:508:44: warning: ‘sf::Image sf::RenderWindow::capture() const’ is deprecated (declared at /usr/local/include/SFML/Graphics/RenderWindow.hpp:140) [-Wdeprecated-declarations]
sf::Image sshot_img = window.capture();
^
Compiling obj/fe_net.o...
Compiling obj/swf.o...
In file included from /usr/include/c++/4.9/backward/hash_map:60:0,
from extlibs/gameswf/base/container.h:75,
from extlibs/gameswf/base/tu_file.h:18,
from src/swf.cpp:26:
/usr/include/c++/4.9/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated. [-Wcpp]
#warning \
^
Compiling obj/media.o...
src/media.cpp: In member function ‘void FeVideoImp::preload()’:
src/media.cpp:462:14: warning: ‘int avcodec_decode_video2(AVCodecContext*, AVFrame*, int*, const AVPacket*)’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:4812) [-Wdeprecated-declarations]
int len = avcodec_decode_video2( codec_ctx, raw_frame,
^
src/media.cpp:463:24: warning: ‘int avcodec_decode_video2(AVCodecContext*, AVFrame*, int*, const AVPacket*)’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:4812) [-Wdeprecated-declarations]
&got_frame, packet );
^
src/media.cpp: In member function ‘void FeVideoImp::video_thread()’:
src/media.cpp:623:16: warning: ‘int avcodec_decode_video2(AVCodecContext*, AVFrame*, int*, const AVPacket*)’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:4812) [-Wdeprecated-declarations]
int len = avcodec_decode_video2( codec_ctx, raw_frame,
^
src/media.cpp:624:27: warning: ‘int avcodec_decode_video2(AVCodecContext*, AVFrame*, int*, const AVPacket*)’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:4812) [-Wdeprecated-declarations]
&got_frame, packet );
^
src/media.cpp:630:35: warning: ‘AVFrame::pkt_pts’ is deprecated (declared at /usr/local/include/libavutil/frame.h:276) [-Wdeprecated-declarations]
raw_frame->pts = raw_frame->pkt_pts;
^
src/media.cpp:630:35: warning: ‘AVFrame::pkt_pts’ is deprecated (declared at /usr/local/include/libavutil/frame.h:276) [-Wdeprecated-declarations]
src/media.cpp: In member function ‘bool FeMedia::internal_open(sf::Texture*)’:
src/media.cpp:930:73: warning: ‘AVStream::codec’ is deprecated (declared at /usr/local/include/libavformat/avformat.h:893) [-Wdeprecated-declarations]
AVCodecContext *codec_ctx = m_imp->m_format_ctx->streams[stream_id]->codec;
^
src/media.cpp:930:73: warning: ‘AVStream::codec’ is deprecated (declared at /usr/local/include/libavformat/avformat.h:893) [-Wdeprecated-declarations]
src/media.cpp:987:73: warning: ‘AVStream::codec’ is deprecated (declared at /usr/local/include/libavformat/avformat.h:893) [-Wdeprecated-declarations]
AVCodecContext *codec_ctx = m_imp->m_format_ctx->streams[stream_id]->codec;
^
src/media.cpp:987:73: warning: ‘AVStream::codec’ is deprecated (declared at /usr/local/include/libavformat/avformat.h:893) [-Wdeprecated-declarations]
src/media.cpp: In member function ‘virtual bool FeMedia::onGetData(sf::SoundStream::Chunk&)’:
src/media.cpp:1151:13: warning: ‘int avcodec_decode_audio4(AVCodecContext*, AVFrame*, int*, const AVPacket*)’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:4763) [-Wdeprecated-declarations]
int len = avcodec_decode_audio4( m_audio->codec_ctx, frame, &got_frame, packet );
^
src/media.cpp:1151:82: warning: ‘int avcodec_decode_audio4(AVCodecContext*, AVFrame*, int*, const AVPacket*)’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:4763) [-Wdeprecated-declarations]
int len = avcodec_decode_audio4( m_audio->codec_ctx, frame, &got_frame, packet );
^
mkdir -p obj/squirrel
Compiling obj/squirrel/sqapi.o...
Compiling obj/squirrel/sqbaselib.o...
Compiling obj/squirrel/sqfuncstate.o...
Compiling obj/squirrel/sqdebug.o...
Compiling obj/squirrel/sqlexer.o...
Compiling obj/squirrel/sqobject.o...
Compiling obj/squirrel/sqcompiler.o...
Compiling obj/squirrel/sqstate.o...
Compiling obj/squirrel/sqtable.o...
Compiling obj/squirrel/sqmem.o...
Compiling obj/squirrel/sqvm.o...
Compiling obj/squirrel/sqclass.o...
Archiving obj/libsquirrel.a...
mkdir -p obj/sqstdlib
Compiling obj/sqstdlib/sqstdblob.o...
Compiling obj/sqstdlib/sqstdio.o...
Compiling obj/sqstdlib/sqstdstream.o...
Compiling obj/sqstdlib/sqstdmath.o...
Compiling obj/sqstdlib/sqstdstring.o...
Compiling obj/sqstdlib/sqstdaux.o...
Compiling obj/sqstdlib/sqstdsystem.o...
Compiling obj/sqstdlib/sqstdrex.o...
Archiving obj/libsqstdlib.a...
mkdir -p obj/gsbaselib
Compiling obj/gsbaselib/configvars.o...
Compiling obj/gsbaselib/ear_clip_triangulate_float.o...
Compiling obj/gsbaselib/ear_clip_triangulate_sint16.o...
Compiling obj/gsbaselib/container.o...
Compiling obj/gsbaselib/file_util.o...
Compiling obj/gsbaselib/image.o...
Compiling obj/gsbaselib/image_filters.o...
Compiling obj/gsbaselib/jpeg.o...
Compiling obj/gsbaselib/logger.o...
Compiling obj/gsbaselib/membuf.o...
Compiling obj/gsbaselib/postscript.o...
Compiling obj/gsbaselib/triangulate_float.o...
Compiling obj/gsbaselib/triangulate_sint32.o...
Compiling obj/gsbaselib/tu_file.o...
Compiling obj/gsbaselib/tu_gc_singlethreaded_marksweep.o...
Compiling obj/gsbaselib/tu_loadlib.o...
Compiling obj/gsbaselib/tu_random.o...
Compiling obj/gsbaselib/tu_timer.o...
Compiling obj/gsbaselib/tu_types.o...
Compiling obj/gsbaselib/utf8.o...
Compiling obj/gsbaselib/utility.o...
Compiling obj/gsbaselib/zlib_adapter.o...
mkdir -p obj/gameswflib
mkdir -p obj/gameswflib/gameswf_as_classes
Compiling obj/gameswflib/gameswf_as_classes/as_array.o...
Compiling obj/gameswflib/gameswf_as_classes/as_boolean.o...
Compiling obj/gameswflib/gameswf_as_classes/as_broadcaster.o...
Compiling obj/gameswflib/gameswf_as_classes/as_class.o...
Compiling obj/gameswflib/gameswf_as_classes/as_color.o...
Compiling obj/gameswflib/gameswf_as_classes/as_color_transform.o...
Compiling obj/gameswflib/gameswf_as_classes/as_date.o...
Compiling obj/gameswflib/gameswf_as_classes/as_event.o...
Compiling obj/gameswflib/gameswf_as_classes/as_flash.o...
Compiling obj/gameswflib/gameswf_as_classes/as_geom.o...
Compiling obj/gameswflib/gameswf_as_classes/as_global.o...
Compiling obj/gameswflib/gameswf_as_classes/as_key.o...
Compiling obj/gameswflib/gameswf_as_classes/as_loadvars.o...
Compiling obj/gameswflib/gameswf_as_classes/as_math.o...
Compiling obj/gameswflib/gameswf_as_classes/as_matrix.o...
Compiling obj/gameswflib/gameswf_as_classes/as_mcloader.o...
Compiling obj/gameswflib/gameswf_as_classes/as_mouse.o...
Compiling obj/gameswflib/gameswf_as_classes/as_mouse_event.o...
Compiling obj/gameswflib/gameswf_as_classes/as_netconnection.o...
Compiling obj/gameswflib/gameswf_as_classes/as_netstream.o...
Compiling obj/gameswflib/gameswf_as_classes/as_number.o...
Compiling obj/gameswflib/gameswf_as_classes/as_point.o...
Compiling obj/gameswflib/gameswf_as_classes/as_selection.o...
Compiling obj/gameswflib/gameswf_as_classes/as_sharedobject.o...
Compiling obj/gameswflib/gameswf_as_classes/as_sound.o...
Compiling obj/gameswflib/gameswf_as_classes/as_string.o...
Compiling obj/gameswflib/gameswf_as_classes/as_textformat.o...
Compiling obj/gameswflib/gameswf_as_classes/as_transform.o...
Compiling obj/gameswflib/gameswf_as_classes/as_xml.o...
Compiling obj/gameswflib/gameswf_as_classes/as_xmlsocket.o...
Compiling obj/gameswflib/gameswf_abc.o...
Compiling obj/gameswflib/gameswf_action.o...
Compiling obj/gameswflib/gameswf_avm2.o...
Compiling obj/gameswflib/gameswf_as_sprite.o...
Compiling obj/gameswflib/gameswf_button.o...
Compiling obj/gameswflib/gameswf_canvas.o...
Compiling obj/gameswflib/gameswf_character.o...
Compiling obj/gameswflib/gameswf_disasm.o...
Compiling obj/gameswflib/gameswf_dlist.o...
Compiling obj/gameswflib/gameswf_environment.o...
Compiling obj/gameswflib/gameswf_filters.o...
Compiling obj/gameswflib/gameswf_font.o...
Compiling obj/gameswflib/gameswf_function.o...
Compiling obj/gameswflib/gameswf_impl.o...
Compiling obj/gameswflib/gameswf_listener.o...
Compiling obj/gameswflib/gameswf_log.o...
Compiling obj/gameswflib/gameswf_morph2.o...
Compiling obj/gameswflib/gameswf_movie_def.o...
Compiling obj/gameswflib/gameswf_object.o...
Compiling obj/gameswflib/gameswf_player.o...
Compiling obj/gameswflib/gameswf_render.o...
Compiling obj/gameswflib/gameswf_root.o...
Compiling obj/gameswflib/gameswf_shape.o...
Compiling obj/gameswflib/gameswf_sound.o...
Compiling obj/gameswflib/gameswf_sprite.o...
Compiling obj/gameswflib/gameswf_sprite_def.o...
Compiling obj/gameswflib/gameswf_stream.o...
Compiling obj/gameswflib/gameswf_styles.o...
Compiling obj/gameswflib/gameswf_tesselate.o...
Compiling obj/gameswflib/gameswf_text.o...
Compiling obj/gameswflib/gameswf_tools.o...
Compiling obj/gameswflib/gameswf_types.o...
Compiling obj/gameswflib/gameswf_value.o...
Compiling obj/gameswflib/gameswf_video_impl.o...
Compiling obj/gameswflib/gameswf_mutex.o...
Compiling obj/gameswflib/gameswf_sound_handler_openal.o...
Compiling obj/gameswflib/gameswf_freetype.o...
Compiling obj/gameswflib/gameswf_render_handler_ogles.o...
extlibs/gameswf/gameswf/gameswf_render_handler_ogles.cpp: In function ‘void ffmpeg_resample(int, int, int, int, uint8*, int, int)’:
extlibs/gameswf/gameswf/gameswf_render_handler_ogles.cpp:1194:2: warning: ‘int avpicture_alloc(AVPicture*, AVPixelFormat, int, int)’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:5441) [-Wdeprecated-declarations]
avpicture_alloc( &my_pict, fmt, dst_width, dst_height );
^
extlibs/gameswf/gameswf/gameswf_render_handler_ogles.cpp:1194:56: warning: ‘int avpicture_alloc(AVPicture*, AVPixelFormat, int, int)’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:5441) [-Wdeprecated-declarations]
avpicture_alloc( &my_pict, fmt, dst_width, dst_height );
^
extlibs/gameswf/gameswf/gameswf_render_handler_ogles.cpp:1200:11: warning: ‘AVPicture::data’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:3892) [-Wdeprecated-declarations]
my_pict.data, my_pict.linesize );
^
extlibs/gameswf/gameswf/gameswf_render_handler_ogles.cpp:1200:11: warning: ‘AVPicture::data’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:3892) [-Wdeprecated-declarations]
extlibs/gameswf/gameswf/gameswf_render_handler_ogles.cpp:1200:25: warning: ‘AVPicture::linesize’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:3894) [-Wdeprecated-declarations]
my_pict.data, my_pict.linesize );
^
extlibs/gameswf/gameswf/gameswf_render_handler_ogles.cpp:1200:25: warning: ‘AVPicture::linesize’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:3894) [-Wdeprecated-declarations]
extlibs/gameswf/gameswf/gameswf_render_handler_ogles.cpp:1203:34: warning: ‘AVPicture::data’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:3892) [-Wdeprecated-declarations]
dst_width, dst_height, my_pict.data[0], 0 );
^
extlibs/gameswf/gameswf/gameswf_render_handler_ogles.cpp:1203:34: warning: ‘AVPicture::data’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:3892) [-Wdeprecated-declarations]
extlibs/gameswf/gameswf/gameswf_render_handler_ogles.cpp:1211:2: warning: ‘void avpicture_free(AVPicture*)’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:5447) [-Wdeprecated-declarations]
avpicture_free( &my_pict );
^
extlibs/gameswf/gameswf/gameswf_render_handler_ogles.cpp:1211:27: warning: ‘void avpicture_free(AVPicture*)’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:5447) [-Wdeprecated-declarations]
avpicture_free( &my_pict );
^
Archiving obj/libgameswf.a...
mkdir -p obj/audiolib
Compiling obj/audiolib/ALCheck.o...
Compiling obj/audiolib/AudioDevice.o...
Compiling obj/audiolib/Listener.o...
Compiling obj/audiolib/SoundSource.o...
Compiling obj/audiolib/SoundStream.o...
Archiving obj/libaudio.a...
Creating executable: attract

Once the attract mode source code has finished compiling, we can install the binary into the system for use. This will overwrite the old executable and update attract mode.


pi@retropie:~/develop/attract $ sudo make install
flags: -Wl,--export-dynamic -I/usr/include/freetype2 -DDATA_PATH=\"/usr/local/share/attract/\" -O2 -DNDEBUG -I/opt/vc/include -L/opt/vc/lib -Iextlibs/miniz -Iextlibs/audio/include -D__STDC_CONSTANT_MACROS -I/usr/local/include -I/usr/include/freetype2 -I/usr/include/AL -Iextlibs/squirrel/include -Iextlibs/sqrat/include -Iextlibs/gameswf -DFE_RPI -DUSE_GLES -DUSE_FONTCONFIG -DUSE_SWRESAMPLE
fatal: No names found, cannot describe anything.
install -D attract /usr/local/bin/attract
mkdir -p /usr/local/share/attract/
cp -r config/* /usr/local/share/attract/

After the install we can verify the newest version of attract mode has been installed and updated.


pi@retropie:~/develop/attract $ attract -v
Attract-Mode v2.2.1 (Linux, SFML 2.3 +FontConfig +RPi +SWF)

Using FFmpeg for Audio and Video.
avcodec 57.66.108 / avformat 57.58.101 / swscale 4.3.101 / swresample 2.4.100

Shaders are not available.

Lastly we should reboot RetroPie to finish the process to update attract mode.


pi@retropie:~/develop/attract $ sudo reboot
Connection to retropie.local closed by remote host.

You have now updated attract mode to the newest version and installed the updates. Attract mode should run as normal and you are all set. When you need to update attract mode again you can use this same process in the future. You can check attract mode’s github commits page here to view the newest updates.

We hope this was helpful. You can also check out our other posts on RetroPie Controllers and Checking Performance in RetroPie with htop.