The very personal dotfiles of Levi Olson.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.7 KiB

6 years ago
  1. #!/bin/bash
  2. ##############################################################################
  3. # browser-exec
  4. # -----------
  5. # Opens a hyperlink in the browser that is currently being run in a container.
  6. # First checks if firefox is running then chrome.
  7. # If neither are running it starts a firefox container.
  8. #
  9. # Usage:
  10. # browser-exec $uri
  11. #
  12. # Based on the amazing work of Jess Frazelle
  13. #
  14. # Dependancies: firefox, chrome, nsenter, xdg
  15. #
  16. # :authors: Levi Olson
  17. # :date: 1 Feb 2018
  18. # :version: 0.0.1
  19. ##############################################################################
  20. #set -e
  21. set -o pipefail
  22. browser_exec() {
  23. # check if firefox container is running
  24. firefox_state=$(docker inspect --format "{{.State.Running}}" firefox 2>/dev/null)
  25. if [[ "$firefox_state" == "true" ]]; then
  26. docker exec -i firefox /usr/bin/firefox "$@" 2>/dev/null
  27. else
  28. # check if chrome container is running
  29. chrome_state=$(docker inspect --format "{{.State.Running}}" chrome 2>/dev/null)
  30. if [[ "$chrome_state" == "true" ]]; then
  31. docker exec -i chrome /usr/bin/google-chrome --user-data-dir=/data "$@" 2>/dev/null
  32. else
  33. # maybe we are running in runc
  34. chrome_pid=$(pgrep -f "chrome --user-data" | head -n 1 2>/dev/null)
  35. if [[ ! -z "$chrome_pid" ]]; then
  36. # nsenter the chrome runc container
  37. sudo nsenter -t "$chrome_pid" --pid --user --net --uts --mount --ipc /usr/bin/google-chrome --user-data-dir=/data "$@" 2>/dev/null
  38. else
  39. # neither are currently running so lets try xdg-open
  40. xdg-open "$@"
  41. fi
  42. fi
  43. fi
  44. }
  45. browser_exec "$@"