This article was originally titled “Installing Flash Player on Ubuntu” and published in 2014. It is no longer an installation tutorial. Adobe ended Flash Player support on December 31, 2020 and blocked Flash content from running beginning January 12, 2021. Adobe no longer provides old downloads, explicitly recommends uninstalling the player, and warns that third-party “Flash downloads” are a common malware source.
Firefox 85 removed Flash support and has no setting to re-enable it. Copying libflashplayer.so into a current browser profile neither restores supported Flash nor avoids reintroducing an old runtime with no security patches. The current purpose of this article is to retire the plugin safely and, where rights are clear, migrate owned or authorized historical content to modern formats.
The complete 2014 source remains in an inert archive at the end. Its installation commands are historical evidence only and must not be executed.
Table of Contents
Decide whether the task is retirement, migration, or preservation
| Actual need | Reasonable goal | Do not do this |
|---|---|---|
| A plugin remains on an ordinary Ubuntu workstation | Inventory, quarantine, and remove it through a supported software-management process | Install an old browser or download Flash from a mirror |
| You own the FLA, source code, and media masters | Generate HTML, Canvas, video, or a new application from the source project | Treat the compiled SWF as complete source code |
| You are authorized to present an SWF but cannot rewrite it yet | Evaluate current Ruffle in an isolated staging environment and set a migration deadline | Build a public arbitrary-upload player or claim complete compatibility |
| The only file is protected, DRM-bound, login-dependent, or tied to a retired server | Stop and obtain permission, sources, and interface documentation from the rightsholder | Bypass protection, impersonate a server, crack licensing, or extract restricted assets |
| A research institution must preserve original behavior | Have digital-preservation and security staff use a closed disposable environment | Restore NPAPI Flash on a daily networked desktop |
Possessing a file is not automatically permission to republish, modify, or bypass its access controls. Record the rightsholder, license scope, permitted audience, and preservation basis first. If they are unclear, perform only hashes and metadata inventory; do not run the content.
Build an evidence inventory without executing content
On an authorized local copy, first locate source projects and deliverables. These commands list files without opening an SWF; legacy-site is a placeholder directory:
find legacy-site -type f -iname '*.fla' -print
find legacy-site -type f -iname '*.swf' -print
find legacy-site -type f -iname '*.flv' -print
find legacy-site -type f -iname '*.as' -print
File names can reveal customers, courses, or internal projects, so redact inventories before sharing. Record the hash, type, and metadata of one approved sample. These are Ubuntu/GNU examples:
sha256sum -- legacy-site/example.swf
file -- legacy-site/example.swf
stat -- legacy-site/example.swf
Do not double-click an unknown SWF or upload it to an online “converter.” Build at least this evidence table:
| Area | Evidence to record |
|---|---|
| Rights | Owner, license, distribution scope, access controls, and expiry |
| Source assets | FLA, ActionScript, images, fonts, audio, video, build instructions, and versions |
| Runtime dependencies | ActionScript version, external URLs, backend APIs, shared objects, and camera/microphone needs |
| Current behavior | Critical scenes, inputs and outputs, dimensions, frame rate, synchronization, saves, and errors |
| Data risk | User identifiers, credentials, telemetry, uploads, third-party domains, and retention |
Keep a read-only backup of the source tree, work on a copy, and record tool versions plus input and output hashes for every conversion.
Retire the old plugin safely on Ubuntu
Modern Firefox has no switch to re-enable Flash. Start with read-only inspection of possible packages and the user plugin directory; do not assume the old article's path exists:
apt list --installed 2>/dev/null | grep -Ei 'flash|pepper'
find "$HOME/.mozilla/plugins" -maxdepth 1 -type f -print
Package names differ across Ubuntu releases and installation histories. For an exact package found by the package manager, inspect a simulated removal first:
apt remove --simulate exact-package-name
Replace exact-package-name only with the single package just identified. Do not use wildcards, copy a package name from another system, or perform the real removal before reviewing dependency changes. The actual change belongs in the supported administration process for the current Ubuntu release, with a transaction log and rollback plan.
If evidence shows that the old article was used to copy exactly one user-level file manually, quarantine that exact file reversibly instead of deleting an entire profile:
plugin="$HOME/.mozilla/plugins/libflashplayer.so"
test -f "$plugin" || exit 1
test ! -L "$plugin" || exit 1
quarantine=$(mktemp -d "$HOME/flash-retirement.XXXXXX")
mv -i -- "$plugin" "$quarantine"/
printf '%s' "$quarantine"
This moves only the reviewed file and prints its quarantine location; it does not manage system packages. After accepting the modern browser, inventory snapshot, and business replacement, handle the quarantine according to the approved retention policy. Do not put it back into a browser or install an old browser to see whether it still runs.
Also remove untrusted Flash-branded browser extensions, update to a supported Ubuntu release and browser, and inspect launchers, containers, old user profiles, and enterprise images. Stop if the path is a symlink, ownership is unexpected, the package plan removes unrelated software, a business still claims plugin dependency, or no recoverable backup exists.
Prefer migration from the source project
Adobe describes SWF as a rendered, compressed delivery format from which much source data cannot be reimported. Find the FLA and original assets instead of relying on decompilation. “Protect from Import” is an explicit stop condition; this guide provides no bypass.
| Content form | Preferred migration | Acceptance focus |
|---|---|---|
| Timeline animation with FLA/assets | Copy into HTML5 Canvas in a supported tool, or rebuild as SVG/CSS animation | Visuals, timing, fonts, scaling, and fallback content |
| Linear video or audio | Transcode an authorized master to browser-supported media while retaining the high-quality master | Synchronization, captions, transcript, bitrate, and color |
| Form, course, or information application | Rebuild with semantic HTML, CSS, and JavaScript | Keyboard, focus, screen readers, and error recovery |
| Game or complex ActionScript | Port from source to the modern Web or a supported engine | Input, saves, physics, networking, performance, and determinism |
| SWF only | Assess rights and preservation value first; emulation is a bridge | Functional gaps, external dependencies, authenticity, and retirement date |
Adobe Animate's automatic HTML5 Canvas conversion comments out ActionScript and may remove video, 3D transformations, or other unsupported features. “Conversion succeeded” does not mean semantic equivalence. Test every critical scene and rewrite interaction manually.
Ruffle is only a bounded bridge
Ruffle is an open-source Flash emulator, not Adobe Flash Player and not a tool for bypassing access control or DRM. Its official compatibility page continues to report gaps in ActionScript 1/2 and 3 language and APIs. Those percentages change and are not acceptance results for a particular work.
Evaluate Ruffle only when all of these are true:
- You own the content or have explicit authorization to run and publish it.
- The file hash is fixed, provenance is trusted, and no import protection, license, or authentication bypass is requested.
- An official stable project release is pinned in an isolated staging origin, with source, version, and checksum recorded.
- Unneeded external network, page-script bridging, camera, microphone, clipboard, and local-file access are denied by default.
- The service accepts no public SWF uploads and does not share an origin with authenticated sessions, administration, or sensitive data.
- A migration owner, compatibility tests, monitoring, rollback, and a fixed removal date exist.
The project's use of Rust and WebAssembly does not make an arbitrary SWF trusted. The emulator, browser, GPU driver, and work's own code remain attack surfaces. Keep dependencies updated and treat each new version as a change requiring renewed acceptance.
Isolation boundaries when original behavior must be preserved
If a lawful preservation task cannot reproduce critical behavior through modern migration, a security or preservation team should approve a disposable laboratory environment. The legacy Flash runtime must not return to an ordinary workstation or an Internet-capable browser.
Minimum boundaries are no network, no shared clipboard, no shared host directories, an unprivileged account, read-only input copies, a clean snapshot, constrained output, execution logging, and destruction after the task. Stop if the SWF requests an external domain, login, payment, camera, microphone, local file, or unknown native extension. Do not impersonate a licensing server or proxy around geographic, account, or subscription restrictions.
Isolation reduces exposure; it does not make an unpatched runtime safe. If critical behavior depends on a retired server, preserve protocol documentation, screenshots, recordings, and logs instead of reconnecting unknown infrastructure.
Publish a modern replacement
Use the original authorized master for linear media; do not steal assets from a protected SWF. A minimal HTML video structure can look like this:
<video controls preload="metadata" poster="poster.webp">
<source src="feature.webm" type="video/webm">
<source src="feature.mp4" type="video/mp4">
<track kind="captions" src="captions-en.vtt" srclang="en" label="English">
<p>Download the authorized video from the publisher's archive.</p>
</video>
Provide human-reviewed captions and a transcript, keyboard-operable controls, a way to pause animation, and clear language and copyright information. Canvas animation also needs equivalent text and semantic controls in the DOM; do not trap all interaction inside an inaccessible canvas.
Before release, remove old <object>/<embed> entry points and prompts to install Flash, then provide a clear migration notice and contact route. Collect no clicks, device fingerprints, or viewing history by default. If analytics are necessary, define purpose, minimum fields, consent, and retention first; never carry old Flash parameters into the new page without review.
Verify, cut over, and roll back
| Area | Pass condition |
|---|---|
| Rights | Inputs, fonts, music, video, code, and publication scope are documented |
| Security | No Flash plugin, old-browser requirement, or arbitrary upload; external requests are allowlisted |
| Function | Critical scenes, input, audio/video, saves, errors, and offline fallback match the baseline |
| Accessibility | Keyboard, focus, captions, transcript, alternatives, and reduced motion are accepted |
| Privacy | No inherited credentials/identifiers; minimization, consent, and deletion routes are defined |
| Operations | Version pinning, reproducible build, monitoring, owner, rollback, and retirement date exist |
Deploy to staging without real user data first. Retain read-only evidence of the old page and a rollback-capable modern release, but no publicly callable old player. Monitor errors and external requests after cutover. If unauthorized access, content divergence, a security alert, or accessibility regression appears, roll back to a safe “content temporarily unavailable” page—not to Flash.
Stop conditions
- The rightsholder, license, audience, or modification authority is unclear.
- The task asks to remove import protection, bypass DRM/login/paywalls, or revive someone else's retired service.
- Flash Player, an old browser, or a converter is available only from a third-party site.
- SWF provenance is unknown, its hash changes, or it requests unnecessary network, device, or local privileges.
- Only an SWF exists but someone claims it can fully restore the FLA, source code, or original assets.
- There is no isolated environment, rollback, owner, acceptance baseline, or modernization deadline.
Pause and escalate these cases to rights, security, preservation, or accessibility owners. The safe failure state is a clear unavailable notice and lawful contact route, not weaker browser security.
References
- Adobe: Flash Player End of Life
- Mozilla: end of Flash support in Firefox
- Microsoft: Flash Player end of support and browser removal
- Adobe Animate: create and migrate HTML5 Canvas documents
- Adobe Animate: SWF rendering and reimport limitations
- MDN: HTML `<video>` and accessibility
- Official Ruffle project
- Official Ruffle compatibility status
Historical source archive
The following is the complete inert archive of the visible 2014 body in source_export. It has no trailing whitespace or private, credential, referral, or tracking value requiring redaction, so nothing was replaced. The package name, extraction command, and plugin-copy command inside the fence are obsolete historical evidence and must not be executed.
去官网下载对应的flash软件包,我下的是install_flash_player_11_linux.x86_64.tar.gz,放在桌面的。
安装用命令(文件名和地址你对应自己的做修改):
tar xvf Desktop/install_flash_player_11_linux.x86_64.tar.gz
此时Mozilla Firefox尚不能使用flash,执行以下命令:
cp libflashplayer.so ~/.mozilla/plugins
Enjoy it!
