I need help with creating a simple bash script

My goal is to create a script, when executed creates 2 files, a systemd service and another script, and that service should execute that script on startup. Here is the script:

touch  /etc/systemd/system/youtube.service
echo ' [Unit]

ExecStart=/bin/bash /home/youtube.sh

WantedBy=multi-user.target ' > /etc/systemd/system/youtube.service

chmod 644 /etc/systemd/system/youtube.service
systemctl enable youtube.service
systemctl start youtube.service
touch /home/youtube.sh
chmod +x /home/youtube.sh
echo ' #!/bin/bash
xdg-open youtube.com ' > /home/youtube.sh

The problem i have that on startup nothing happens. Both files are correctly created, and when i execute the youtube script, youtube opens.
so there should be something wrong with the service file.

Kernel: 5.17.1-zen1-1-zen arch: x86_64 bits: 64 compiler: gcc v: 11.2.0
parameters: BOOT_IMAGE=/@/boot/vmlinuz-linux-zen
root=UUID=38add348-b329-4341-8751-7bbc309d28a1 rw [email protected]
quiet splash rd.udev.log_priority=3 vt.global_cursor_default=0
systemd.unified_cgroup_hierarchy=0 loglevel=3
Desktop: KDE Plasma v: 5.24.4 tk: Qt v: 5.15.3 info: latte-dock
wm: kwin_x11 vt: 1 dm: SDDM Distro: Garuda Linux base: Arch Linux
Type: Desktop Mobo: Micro-Star model: B450M PRO-VDH MAX (MS-7A38) v: 8.0
serial: <superuser required> UEFI: American Megatrends v: B.40
date: 11/07/2019
Info: model: AMD Ryzen 5 3600X bits: 64 type: MT MCP arch: Zen 2
family: 0x17 (23) model-id: 0x71 (113) stepping: 0 microcode: 0x8701013
Topology: cpus: 1x cores: 6 tpc: 2 threads: 12 smt: enabled cache:
L1: 384 KiB desc: d-6x32 KiB; i-6x32 KiB L2: 3 MiB desc: 6x512 KiB
L3: 32 MiB desc: 2x16 MiB
Speed (MHz): avg: 3797 high: 4314 min/max: 2200/4409 boost: enabled
scaling: driver: acpi-cpufreq governor: performance cores: 1: 4026 2: 3575
3: 3589 4: 3640 5: 4069 6: 4314 7: 4048 8: 3552 9: 3591 10: 3970 11: 3601
12: 3600 bogomips: 91201
Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm
Type: itlb_multihit status: Not affected
Type: l1tf status: Not affected
Type: mds status: Not affected
Type: meltdown status: Not affected
Type: spec_store_bypass
mitigation: Speculative Store Bypass disabled via prctl
Type: spectre_v1
mitigation: usercopy/swapgs barriers and __user pointer sanitization
Type: spectre_v2
mitigation: Retpolines, IBPB: conditional, STIBP: conditional, RSB filling
Type: srbds status: Not affected
Type: tsx_async_abort status: Not affected
Device-1: AMD Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
vendor: Tul / PowerColor driver: amdgpu v: kernel pcie: gen: 4
speed: 16 GT/s lanes: 16 ports: active: DP-1,HDMI-A-1 empty: DP-2,DP-3
bus-ID: 2b:00.0 chip-ID: 1002:731f class-ID: 0300
Display: x11 server: X.Org v: 21.1.3 with: Xwayland v: 22.1.1
compositor: kwin_x11 driver: X: loaded: amdgpu unloaded: modesetting,radeon
alternate: fbdev,vesa gpu: amdgpu display-ID: :0 screens: 1
Screen-1: 0 s-res: 4480x1440 s-dpi: 96 s-size: 1185x381mm (46.65x15.00")
s-diag: 1245mm (49.01")
Monitor-1: DP-1 mapped: DisplayPort-0 pos: right model: Asus VP228
serial: <filter> built: 2015 res: 1920x1080 hz: 60 dpi: 102 gamma: 1.2
size: 476x268mm (18.74x10.55") diag: 546mm (21.5") ratio: 16:9 modes:
max: 1920x1080 min: 720x400
Monitor-2: HDMI-A-1 mapped: HDMI-A-0 pos: primary,left
model: BenQ GL2706PQ serial: <filter> built: 2016 res: 2560x1440 hz: 60
dpi: 109 gamma: 1.2 size: 597x336mm (23.5x13.23") diag: 685mm (27")
ratio: 16:9 modes: max: 2560x1440 min: 640x480
OpenGL: renderer: AMD Radeon RX 5600 XT (navi10 LLVM 13.0.1 DRM 3.44
v: 4.6 Mesa 22.0.1 direct render: Yes
Device-1: AMD Navi 10 HDMI Audio driver: snd_hda_intel v: kernel pcie:
gen: 4 speed: 16 GT/s lanes: 16 bus-ID: 2b:00.1 chip-ID: 1002:ab38
class-ID: 0403
Device-2: AMD Starship/Matisse HD Audio vendor: Micro-Star MSI
driver: snd_hda_intel v: kernel pcie: gen: 4 speed: 16 GT/s lanes: 16
bus-ID: 2d:00.4 chip-ID: 1022:1487 class-ID: 0403
Device-3: C-Media CM108 Audio Controller type: USB
driver: hid-generic,snd-usb-audio,usbhid bus-ID: 3-3:4 chip-ID: 0d8c:013c
class-ID: 0300
Sound Server-1: ALSA v: k5.17.1-zen1-1-zen running: yes
Sound Server-2: PulseAudio v: 15.0 running: no
Sound Server-3: PipeWire v: 0.3.49 running: yes
Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet
vendor: Micro-Star MSI driver: r8169 v: kernel pcie: gen: 1 speed: 2.5 GT/s
lanes: 1 port: f000 bus-ID: 25:00.0 chip-ID: 10ec:8168 class-ID: 0200
IF: enp37s0 state: down mac: <filter>
Device-2: Realtek RTL8811AU 802.11a/b/g/n/ac WLAN Adapter type: USB
driver: rtl88XXau bus-ID: 1-3:3 chip-ID: 0bda:a811 class-ID: 0000
serial: <filter>
IF: wlp3s0f0u3 state: up mac: <filter>
IF-ID-1: enp3s0f0u1 state: unknown speed: -1 duplex: half mac: <filter>
IF-ID-2: virbr0 state: down mac: <filter>
Device-1: HTC (High Tech ) MT65xx Android Phone type: USB
driver: rndis_host v: kernel bus-ID: 1-1:2 chip-ID: 0bb4:0004
class-ID: 0a00 serial: <filter>
Report: bt-service: enabled,stopped note: tool can't run
Local Storage: total: 3.18 TiB used: 792.66 GiB (24.3%)
SMART Message: Unable to run smartctl. Root privileges required.
ID-1: /dev/sda maj-min: 8:0 vendor: Toshiba model: DT01ACA300
size: 2.73 TiB block-size: physical: 4096 B logical: 512 B speed: 6.0 Gb/s
type: HDD rpm: 7200 serial: <filter> rev: ABB0 scheme: GPT
ID-2: /dev/sdb maj-min: 8:16 vendor: Samsung model: SSD 750 EVO 500GB
size: 465.76 GiB block-size: physical: 512 B logical: 512 B speed: 6.0 Gb/s
type: SSD serial: <filter> rev: 1B6Q scheme: GPT
ID-1: / raw-size: 448.27 GiB size: 448.27 GiB (100.00%)
used: 173.37 GiB (38.7%) fs: btrfs dev: /dev/sdb2 maj-min: 8:18
ID-2: /boot/efi raw-size: 300 MiB size: 299.4 MiB (99.80%)
used: 25.8 MiB (8.6%) fs: vfat dev: /dev/sdb1 maj-min: 8:17
ID-3: /home raw-size: 448.27 GiB size: 448.27 GiB (100.00%)
used: 173.37 GiB (38.7%) fs: btrfs dev: /dev/sdb2 maj-min: 8:18
ID-4: /var/log raw-size: 448.27 GiB size: 448.27 GiB (100.00%)
used: 173.37 GiB (38.7%) fs: btrfs dev: /dev/sdb2 maj-min: 8:18
ID-5: /var/tmp raw-size: 448.27 GiB size: 448.27 GiB (100.00%)
used: 173.37 GiB (38.7%) fs: btrfs dev: /dev/sdb2 maj-min: 8:18
Kernel: swappiness: 133 (default 60) cache-pressure: 100 (default)
ID-1: swap-1 type: partition size: 17.2 GiB used: 0 KiB (0.0%)
priority: -2 dev: /dev/sdb3 maj-min: 8:19
ID-2: swap-2 type: zram size: 15.63 GiB used: 0 KiB (0.0%) priority: 100
dev: /dev/zram0
System Temperatures: cpu: N/A mobo: N/A gpu: amdgpu temp: 51.0 C
mem: 58.0 C
Fan Speeds (RPM): N/A gpu: amdgpu fan: 0
Processes: 379 Uptime: 4m wakeups: 0 Memory: 15.63 GiB
used: 2.55 GiB (16.3%) Init: systemd v: 250 tool: systemctl Compilers:
gcc: 11.2.0 clang: 13.0.1 Packages: apt: 0 pacman: 2373 lib: 532
Shell: fish v: 3.4.1 default: Bash v: 5.1.16 running-in: konsole
inxi: 3.3.15
Garuda (2.6.1-1):
System install date:     2022-01-14
Last full system update: 2022-04-12
Is partially upgraded:   No
Relevant software:       NetworkManager
Windows dual boot:       Probably (Run as root to verify)
Snapshots:               Snapper
Failed units:            bluetooth-autoconnect.service systemd-oomd.socket

You may need to call systemctl daemon-reload after you change the files on disk.

More importantly, what you are trying to won't work.

What is the actual goal here?


Like i said above, my goal is to create a bash script that creates 2 Files, one systemd service and another bash script. And that systemd service has to execute the bash script that was created on PC startup.

That isn't what you are trying to accomplish. That is the implementation you have chosen.

Why are you doing that? What do you want to happen?

What you are doing is trying to run xdg-open as root before you even have a graphical environment available.

1 Like

so what you are saying im missing some sort of sleep variable, so that the xdg open only happens after the enviroment is active. Thanks
I will try that

No, I am saying your plan, whatever it is, is completely and fundamentally flawed.

Normally, I would help you, but since you refuse to answer my question, I guess I can't.

1 Like

I answered it 2 times. I guess i dont know what you mean with your question then. I said what i want to happen, and you ask me what i want to happen..

Writing a script that creates a service isn't what you want to happen.

You are writing that script for a reason, correct? You are trying to open youtube in some circumstance.

What is the reason, what is the result you want?

1 Like

I want a script that i can give to someone, like a friend that he only has to execute and then everytime the PC is restarted an action, in this case youtube opens, happens.

Just put the script in the autostart.

That way it will run as the user after the DE is available.

You don't need a systemd service for that.


So, it's possible that there's some way to do this with the implementation you've chosen. I do not think a sleep variable alone is going to do what you want, though.

If all you're trying to achieve is starting YouTube after you log in, there are much better ways to do this. What I would recommend is putting a modified yourbrowser.desktop file, or even just a custom youtube.desktop file in ~/.config/autostart/. This will work on any DE/WM that implements XDG Autostart which should be the case if xdg-open is working.


Okey, i will try that. But i hate this trend that the help is to show an other way, even if it is easier than what i wanted... I want my thing to work cause i think it should work like this too but then someone wants to force an other way on me.

If you cannot solve the problem, then detach yourself from the problem.

1 Like

This is because you're creating a system service that runs an action that requires an active user session - it won't work.

To echo SonarMonkey, if you want to run something on login for all users then put a .desktop file into /etc/xdg/autostart/; for a single user then into ~/.config/autostart/ .