Run Flash Webpage in Headless Chrome on Ubuntu 14.04 - google-chrome

I am trying to run my Cucumber tests headlessly with Chrome on Ubuntu 14.04 (EC2 instance so no GUI). So far my setup allows this, as the below screenshot shows:
I have an issue when I come to a page with flash on it:
I have restarted the EC2 instance and killed all chrome processes, still no joy.
To clarify, a test will start and chrome opens the page with flash on it and I get this message. If I then end the test and start it again I get the same problem. I guess this is not actually restarting chrome as it is a new instance each time?
So to run these tests I am using the headless gem here which acts as the interface to xvfb.
I have Google Chrome 57.0.2987.133 and have added libflashplayer.so to /opt/google/chrome/pluginsusing this https://askubuntu.com/questions/14629/how-do-i-enable-the-partner-repository
A few extras things I have tried include:
sudo apt-get install pepperflashplugin-nonfree
sudo update-pepperflashplugin-nonfree --install
Is there a way to get this to work so I can render flash based sites? Do I need to enable the flash plugin each time I open chrome? I'm hoping I've missed something obvious.
Update
I have tried setting the pepperflashpluginpath when creating the Chrome profile but this is still not working:
Capybara.register_driver :chrome do |app|
chrome_binary = '/usr/bin/google-chrome'
Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => { "binary" => chrome_binary, "args" => ["--ppapi-flash-path=/usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so"] })
Capybara::Selenium::Driver.new(app, :browser => :chrome, :desired_capabilities => capabilities)
end
Thanks

There were three key parts in getting this to work.
Install Chromium Browser
sudo apt-get install chromium-browser (at time this installed version 58)
The Chrome binary is now installed at
/usr/bin/chromium-browser
Install Flash plugin
https://askubuntu.com/questions/531672/how-to-install-flash-payer-in-ubuntu-14-04-lts
First go to /etc/apt/sources.list and uncomment the lines
deb http://archive.canonical.com/ubuntu trusty partner
deb-src http://archive.canonical.com/ubuntu trusty partner
Then run
sudo apt-get update
sudo apt-get install adobe-flashplugin
This installs the flash plugin at
/usr/lib/adobe-flashplugin/libflashplayer.so
Install Chrome Driver
Then run
sudo apt-get install chromium-chromedriver
sudo ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/chromedriver
That's pretty much it, these were the steps that got me running this with Cucumber headless.

Related

How to develop Flutter web app on Windows Subsystems for Linux (Debian 10)

I would like to develop Flutter web app on Windows Subsystems for Linux (Debian 10). I followed this instruction. https://flutter.dev/docs/get-started/codelab-web
flutter channel beta
flutter upgrade
flutter config --enable-web
First, I input these commands in my terminal and all of them worked fine.
Second, I tried flutter doctor command and this is the result.
Downloading android-arm-release/linux-x64 tools... 2.1s
Downloading android-arm64-profile/linux-x64 tools... 1.8s
Downloading android-arm64-release/linux-x64 tools... 1.6s
Downloading android-x64-profile/linux-x64 tools... 1.6s
Downloading android-x64-release/linux-x64 tools... 1.5s
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, 1.18.0-11.1.pre, on Linux, locale en_US.UTF-8)
[✗] Android toolchain - develop for Android devices
✗ Unable to locate Android SDK.
Install Android Studio from: https://developer.android.com/studio/index.html
On first launch it will assist you in installing the Android SDK components.
(or visit https://flutter.dev/docs/get-started/install/linux#android-setup for detailed instructions).
If the Android SDK has been installed to a custom location, set ANDROID_SDK_ROOT to that location.
You may also want to add it to your PATH environment variable.
[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[!] Android Studio (not installed)
[✓] Connected device (1 available)
! Doctor found issues in 3 categories.
I develop web app, so I don't need Android toolchain and Android Studio, but I need Chrome.
I think there are two ways.
install Chrome on WSL => I searched the Internet, but I couldn't find the way to do so.
user Chrome on Windows 10(not WSL) => I searched the Internet (for example:flutter chrome "windows subsystems for linux"), but I couldn't find the way to do so.
Could you give me any advice?
Try setting the environment variable CHROME_EXECUTABLE to the path of the Chrome executable installed on Windows, so Flutter can locate it.
Turns out, you just need to tell flutter where chrome.exe is located on your host windows machine!
One way to do this is to use GUI Apps, which unfortunately requires WSL version 2 and Windows 11. Read More
Making WSL and GUI Apps ready
If you don't already have wsl, run Powershell in Admin mode and run
wsl --install -d Ubuntu
sudo apt update
change the distro as you like
If you have, run these to make sure it's ready
wsl --set-default-version 2
wsl --update
wsl --shutdown
sudo apt update
Installing Google Chrome on WSL
Change directories into the temp folder: cd /tmp
Use wget to download it: sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
Get the current stable version: sudo dpkg -i google-chrome-stable_current_amd64.deb
Fix the package: sudo apt install --fix-broken -y
Configure the package: sudo dpkg -i google-chrome-stable_current_amd64.deb
To launch, enter: google-chrome
You should be good to go
Running flutter doctor should mark web development as ready, and projects should run with this command:
flutter run -d chrome --web-renderer canvaskit
My WSL2(Windows 10 build 18363) did not recognise the environment variable CHROME_EXECUTABLE.
So, I also added the environment variable WSLENV to 'CHROME_EXECUTABLE/p'.
(https://adamtheautomator.com/windows-subsystem-for-linux/#Sharing_Environment_Variables)
Then, it works!

NaCl helper process running without a sandbox! error when running npm tests

I'n having a problem when running some npm test. The error I'm receiving is: "NaCl helper process running without a sandbox!", which is true, as I'm running the browser with the "--no-sandbox" option. I have to run this option due to the fact that the browser runs as root, and I don't have an option to run it a different user at all(it's a docker image).
Can anyone please help me to sort it out?
P.S I'm installing the browser in the following way:
RUN apt-get update
RUN apt-get install -y nodejs npm
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb https://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
RUN apt-get install -y apt-transport-https
RUN apt-get update
RUN apt-get install -y google-chrome-stable
Thanks in advance!
This error message...
NaCl helper process running without a sandbox!
...implies that you have no setuid sandbox in your system, hence the program was unable to initiate/spawn a new Browsing Context i.e. Chrome Browser session.
Solution
A quick solution will be, if you want to run Chrome and only use the namespace sandbox, you can set the flag:
--disable-setuid-sandbox
This flag will disable the setuid sandbox (Linux only). But if you do so on a host without appropriate kernel support for the namespace sandbox, Chrome will not spin up. As an alternative you can also use the flag:
--no-sandbox
This flag will disable the sandbox for all process types that are normally sandboxed.
Example:
chromeOptions: {
args: ['--disable-setuid-sandbox', '--no-sandbox']
},
You can find a detailed discussion in Security Considerations - ChromeDriver - Webdriver for Chrome
Deep dive
As per the documentation in Linux SUID Sandbox Development google-chrome needs a SUID helper binary to turn on the sandbox on Linux. In majority of the cases you can install the proper sandbox for you using the command:
build/update-linux-sandbox.sh
This program will install the proper sandbox for you in /usr/local/sbin and tell you to update your .bashrc if required.
However, there can be some exceptions as an example, if your setuid binary is out of date, you will get messages such as:
Running without the SUID sandbox!
Or
The setuid sandbox provides API version X, but you need Y
You are using a wrong version of the setuid binary!
In these cases, you need to:
Build chrome_sandbox whenever you build chrome (ninja -C xxx chrome chrome_sandbox instead of ninja -C xxx chrome)
After building, execute update-linux-sandbox.sh.
# needed if you build on NFS!
sudo cp out/Debug/chrome_sandbox /usr/local/sbin/chrome-devel-sandbox
sudo chown root:root /usr/local/sbin/chrome-devel-sandbox
sudo chmod 4755 /usr/local/sbin/chrome-devel-sandbox
Finally, you have to include the following line in your ~/.bashrc (or .zshenv):
export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox
If you are using karma to run your tests, make sure you are using ChromeHeadless as the browser on karma.conf.js

Unable to run headless chrome inside vagrant

I am trying to run unit tests in headless chrome(version 61).
I have mentioned the browsers as 'ChromeHeadless' in Karma.config and corresponding script has been added to package.json.
When I run the npm test command inside vagrant(using Ubuntu 64-bit), it gives me this error:
FATAL:nss_util.cc(632)] NSS_VersionCheck("3.26") failed. NSS >= 3.26 is required. Please upgrade to the latest NSS, and if you still get this error, contact your distribution maintainer.
I tried updating the NSS version by running the below command:
sudo apt-get install --reinstall libnss3 but still no luck.
Is there anything that I am missing or doing incorrectly?

how to downgrade Chrome on Ubuntu and disable auto-update?

I want to downgrade my chrome on Ubuntu
Because I have problems when selenium runs against Chrome 34.
I have installed chrome 33.
But then every once in a while the auto-updater update the chrome.
How can i disable the auto-upadter on Linux specifically?
I had a similar task recently. This is the script I ran to download previous Chrome version, disable auto update and check the installed version:
sudo wget http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_75.0.3770.142-1_amd64.deb && \
sudo dpkg -i google-chrome-stable_75.0.3770.142-1_amd64.deb && \
sudo apt-mark hold google-chrome-stable && \
google-chrome-stable --version \
you can google to find an archive website. I have mentioned 2 of them here, though there are hundreds of them around.
0- choose the version you want to install by going to an archive website like this:
http://www.ubuntuupdates.org/pm/google-chrome-stable
1- In the Download section download the 64-Bits or 32-Bits package suitable for your OS ( or you can directly Press APT_INSTALL button)
3- Install the package using Ubuntu software center. you may need to remove the existing version first.
4- for disabling auto updates you can go to SystemSettings/ Software & Updates from Ubuntu applications Menu
Doing the same things command line:
I assume your user name is "user" you replace it with your username.
1- Browse the website http://www.slimjet.com/chrome/google-chrome-old-version.php or any other archive website.
2- Download a proper version of google-chrome ( I brought 49.0.2623.75 Linux_64)
3- Save the downloaded file in /home/user/Downloads
4- Open a console and execute the following commands:
user#host:~/workspace $ cd ~/Downloads/
user#host:~/Downloads $
user#host:~/Downloads $ sudo dpkg -i ./chrome64_49.0.2623.75.deb
of course you would replace the file name with the one you downloaded.
You can search for software and updates in your dash bar
You can click on Softwares and updates app which is listed
Go to the other Software tab in the window which is opened
you can uncheck the http://dl.google.com/linux/chrome/deb/stable main
and then you can uninstall the new version of chrome and install the old one.
Hope this helps.

XBox 360 Wireless Controller not working with Kodi / XBMC

System:
Ubuntu 14.04.2 LTS (kernel: 3.13.0-45-generic)
Kodi (14.2-BETA1 Git:2259d0b). Platform: Linux x86 64-bit
Original XBOX 360 wireless controller with Xbox 360 USB Wireless Adapter
What I did:
Install ubuntu-xboxdrv:
sudo apt-add-repository -y ppa:rael-gc/ubuntu-xboxdrv
sudo apt-get update
sudo apt-get install ubuntu-xboxdrv
Tested if it works with:
jstest: YES
sdl-jstest: YES
retroarch and mupen64plus playing N64 Mario Kart: YES
Kodi: NOOOO ????
I enabled extensive logging for kodi and uploaded a logfile here: http://xbmclogs.com/psky8dtse (until 20. March '15)
Kodi does not detect the joystick even though it is available over SDL and /dev/input/js0
UPDATE: Running Kodi as root fixes the problem. So it seems there are permission issues. Still don't know how to fix this...
UPDATE2 / FIX: I wrote a NodeJS-bridge between Kodi and the Xbox Controller: https://github.com/cgrossde/XboxControllerKodiBridge
This way only the Bridge needs to run as root and Kodi can continue to run as an unprivileged user. It includes an upstart script that it starts/stops with Kodi.
You have to add the unprivileged user to group "input" (see /etc/group), as "/dev/input" uses this group.