Linux'ta geçici olarak uyku modunu nasıl devre dışı bırakabilirim?

Sercan

--
Katılım
17 Mart 2019
Mesajlar
5,406
Masaüstü bilgisayarımda kurulu Debian 12'de Firefox ile video izlediğim zaman filan uyku moduna girmiyor. Fakat müzik dinlediğim zaman uyuyor. VLC oynatıcı ile de aynısı oluyor.

Dahası bazı zamanlarda geçici olarak uyku modunu kapatmak istiyorum. Yani rsync komut satırında uzun sürecek bir yedekleme yaparken de uyumasın istiyorum. Fakat benim bilgisayar hemen uyku moduna geçiyor.

Uyku modunu tamamen kapatmak istemiyorum. Kullandığım bir özellik.

İstediğim şey şu; bash benzeri bir komutu çalıştırdığımda geçici olarak uyku modunu devre dışı bırakmak istiyorum. Bnu çalıştırmadığım zamanlarda ise uyku modu aktif olabilir. Bunu nasıl yapabilirim?
 
Birde mesela kopyalama işlemi aşağıdaki gibi kullanıdlığında uyumuyormuş.

Kod:
systemd-inhibit --what=block --why="Dosya kopyalama işlemi devam ediyor" cp kaynakdosya hedefdosya
 
Bende ayarlar şöyle

1714050485185.png
 
Bash:
xset s on; vlc; xset s off;
Olarak çalıştırırsanız ekran korucu vlc kapanana kadar
çalışmaz. Ya da;
Bash:
    #!/bin/bash
    xset s on; vlc; xset s off;
bu şekilde bir bash dosyası yapabilir ve bunu kısayol ile
çalıştırabilirsiniz.

Direkt VLC ayarlarından da alttaki şekilde:
Ekran görüntüsü_2024-04-25_16-22-12.png
 
Son düzenleme:
Bash:
xset s on; vlc; xset s off;
Olarak çalıştırırsanız ekran korucu vlc kapanana kadar
çalışmaz. Ya da;
Bash:
    #!/bin/bash
    xset s on; vlc; xset s off;
bu şekilde bir bash dosyası yapabilir ve bunu kısayol ile
çalıştırabilirsiniz.

Direkt VLC ayarlarından da alttaki şekilde:
33015 eklentisine bak
VLC ayarlarım tıpa tıp aynı. Yalnız ben video izlerken sorun yaşamıyorum. Sorun müzik dinlediğimde oluyor.

Mesela aşağıdaki gibi xspf bir liste oluşturdum. Ekipmanların başında iken ilef'i dinliyorum, bu esnada uyku moduna giriyor.

1714055310029.png
1714055220361.png
 
Vlc alttaki gibi çalıştığında ekran koruyucu devreye girmiyor.
Bash:
xset s on; vlc; xset s off;
 
Bu Caffeine uygulaması da işe yaramadı. Bir önceki gece yedek alırken olmadı ama bugün aynı işlem anında uyudu. Sanıyorum rsync kullanırken de uyumaması için systemd-inhibit komunutu kullanacağım.

Kod:
systemd-inhibit rsync (rsync opsiyonları)
 
Bu Caffeine uygulaması da işe yaramadı. Bir önceki gece yedek alırken olmadı ama bugün aynı işlem anında uyudu. Sanıyorum rsync kullanırken de uyumaması için systemd-inhibit komunutu kullanacağım.

Kod:
systemd-inhibit rsync (rsync opsiyonları)
burada kodlar var ama denemedim.
 
Bu konuyu uzun zaman önce aşağıdaki kod ile çözmüştüm. Bunu başlatmak için de .config içinde bulunan autostart klasörüne ekledim ve her bilgisayar başladığında çalışıyordu.

Bash:
#!/bin/bash

# Function to check if audio is playing
is_audio_playing() {
    if pactl list | grep -q "State: RUNNING"; then
        return 0
    else
        return 1
    fi
}

# Main loop
while true; do
    if is_audio_playing; then
        xset s off  # Disable screen saver
    else
        xset s on   # Enable screen saver
    fi
    sleep 5  # Adjust the polling interval as needed
done

Geçen bir sebepten dolayı kısayolları çorba gibi yaptım. Bende bütün .config klasörümü yedek alarak sildim. Bilmeyenler için bu home dizini altında bulunan klasör bütün özelleştirmelerinizi saklıyor. Neyse .config klasörünü sildiğimde doğal olarak autostart klasörüde silindi.

Yukarıdaki sorunun daha kalıcı bir çözümü olabilir mi diye araştırdım. Firefox tarafında hala bir ilerleme yok.

Bende herşeyi en baştan ele almaya karar verdim. Yapmak istediğim şey şu; yukarıdaki kodu daha iyi şekilde yazacağım . Bunu service olarak sisteme ekleyeceğim ve servis her bilgisayar başladığında otomatik olarak çalışacak.

Buraya kadar herşey mantıklı görünüyor ama sonuçta doğru çözüme kavuşsam da istediğim şekilde çalıştırmayı başaramadım.

Yukarıdaki kodu yapay zekanın da yardımı ile aşağıdaki gibi güncelledim. /home/sercan/scripts/firefox/firefox_media_inhibit.sh yoluna koydum.

Bash:
#!/bin/bash

# Set DEBUG to true to enable debug output, false to disable it
DEBUG_MODE=false

# Function to print debug messages
log_debug() {
    if $DEBUG_MODE; then
        echo "$1"
    fi
}

# Function to install playerctl if it's not already installed
install_playerctl() {
    if ! command -v playerctl &> /dev/null; then
        log_debug "playerctl is not installed. Attempting to install it..."

        # Detect the package manager and install playerctl
        if command -v apt-get &> /dev/null; then
            log_debug "Using apt to install playerctl..."
            sudo apt-get update && sudo apt-get install -y playerctl
        elif command -v dnf &> /dev/null; then
            log_debug "Using dnf to install playerctl..."
            sudo dnf install -y playerctl
        elif command -v pacman &> /dev/null; then
            log_debug "Using pacman to install playerctl..."
            sudo pacman -S --noconfirm playerctl
        else
            echo "No supported package manager found. Please install playerctl manually."
            exit 1
        fi

        if ! command -v playerctl &> /dev/null; then
            echo "playerctl installation failed or was not found after installation."
            exit 1
        fi
    else
        log_debug "playerctl is already installed."
    fi
}

# Function to inhibit sleep
inhibit_sleep() {
    log_debug "Media is playing in Firefox. Inhibiting sleep."
    systemd-inhibit --what=idle --who="Firefox Media" --why="Media playing in Firefox" sleep 3600 &
    inhibit_pid=$!
}

# Function to allow sleep
allow_sleep() {
    if [ -n "$inhibit_pid" ]; then
        log_debug "Media stopped. Allowing sleep."
        kill "$inhibit_pid"
        inhibit_pid=""
    fi
}

# Check if playerctl is installed
install_playerctl

# Initialize the inhibit_pid variable
inhibit_pid=""

# Main loop to monitor media status
while true; do
    # Use playerctl to check the status of media in Firefox
    status=$(playerctl -p firefox status 2>/dev/null)
    log_debug "Current status: $status"  # This helps with debugging

    # Compare the status and act accordingly
    if [[ "$status" == "Playing" ]]; then
        log_debug "Media is playing."
        if [ -z "$inhibit_pid" ]; then
            inhibit_sleep
        fi
    else
        log_debug "Media is not playing."
        if [ -n "$inhibit_pid" ]; then
            allow_sleep
        fi
    fi

    # Check the status every 15 seconds
    sleep 15
done

Eğer ben bu scripti /home/sercan/scripts/firefox/firefox_media_inhibit.sh komutu ile çalıştırırsam, aşağıda 4. satırda görüleceği üzere başarılı şekilde çalışıyor.

1730033083828.png

1730032981000.png


Müziği durdurduğumda ise eski haline geri geliyor. Yani buraya kadar herşey normal.

1730033132462.png

1730033149154.png
 
Yukarıdaki kodu service olarak eklediğimde ise çalışmıyor.

Bunun için /etc/systemd/system/firefox-media-inhibit.service yoluna bir dosya oluşturdum ve debian service sitesinde açıkladığı gibi aşağıdaki kodu ekledim.


Kod:
[Unit]
Description=Inhibit sleep while media is playing in Firefox
After=network.target

[Service]
Type=simple
ExecStart=/home/sercan/scripts/firefox/firefox_media_inhibit.sh
User=sercan

[Install]
WantedBy=multi-user.target

systemctl enable firefox-media-inhibit.service komutu ile başlangıçta çalışmasını sağladım.
systemctl start firefox-media-inhibit.service komutu ile de normal olarak başlattım.

systemctl status firefox-media-inhibit.service komutu ile de çalıştığını doğruladım.
1730033680911.png


Fakat ne zaman böyle başlatsam çalışmadı. Bunun yerine /home/sercan/.config/autostart/firefox_media_inhibit.sh.desktop adresine aşağıdaki dosyayı eklediğimde sorunsuz çalışıyor.

Kod:
[Desktop Entry]
Exec=/home/sercan/scripts/firefox/firefox_media_inhibit.sh
Icon=dialog-scripts
Name=firefox_media_inhibit.sh
Path=
Type=Application
X-KDE-AutostartScript=true

Servis olarak işlevsiz olmasının kaynağı ne olabilir?
 
O scripte ps ax ile bakınca "sercan" user olarak çalıştığını teyit edebilirsin. Bir de systemd o servisleri çalıştırırken tamamen bağımsız bir environment kullanıyor. Eğer senin script içerisinde çağırdığın komutlar full path değilse, mesela "/usr/bin/playerctl" yerine sadece "playerctl" o zaman bu komutlar bulunamıyor olabilir.

Ama bende de debian var ve sistemin uyuması diye bir sorunla karşılaşmıyorum hiç. Sende neden çıkıyor bu sorun anlamıyorum.
 
"journalctl -u firefox-media-inhibit" ile komutun loglarını görebilirsiniz.
 
O scripte ps ax ile bakınca "sercan" user olarak çalıştığını teyit edebilirsin. Bir de systemd o servisleri çalıştırırken tamamen bağımsız bir environment kullanıyor. Eğer senin script içerisinde çağırdığın komutlar full path değilse, mesela "/usr/bin/playerctl" yerine sadece "playerctl" o zaman bu komutlar bulunamıyor olabilir.

Ama bende de debian var ve sistemin uyuması diye bir sorunla karşılaşmıyorum hiç. Sende neden çıkıyor bu sorun anlamıyorum.

Firefox Devoloper Edition kullandığım için olabilir.

ps ax ile baktığımda aşağıdaki gibi iki satır görüyordum. Sanıyorum ilki servis olarak başladı diğeri autostart.

1792 ? Ss 0:00 /bin/bash /home/sercan/scripts/firefox/firefox_media_inhibit.sh

5681 ? Ss 0:00 /bin/bash /home/sercan/scripts/firefox/firefox_media_inhibit.sh


Şimdi kodu biraz sadeleştirdim ve tam yolları verdim. Bilgisayarı yeniden başlattım fakat sorunum hala devam ediyor.

Bash:
#!/bin/bash

# Set DEBUG to true to enable debug output, false to disable it
DEBUG_MODE=true

# Function to print debug messages
log_debug() {
    if $DEBUG_MODE; then
        echo "$1"
    fi
}

# Function to inhibit sleep
inhibit_sleep() {
    log_debug "Media is playing in Firefox. Inhibiting sleep."
    /usr/bin/systemd-inhibit --what=idle --who="Firefox Media" --why="Media playing in Firefox" sleep 3600 &
    inhibit_pid=$!
}

# Function to allow sleep
allow_sleep() {
    if [ -n "$inhibit_pid" ]; then
        log_debug "Media stopped. Allowing sleep."
        /bin/kill "$inhibit_pid"
        inhibit_pid=""
    fi
}

# Initialize the inhibit_pid variable
inhibit_pid=""

# Main loop to monitor media status
while true; do
    # Use playerctl to check the status of media in Firefox
    status=$(/usr/bin/playerctl -p firefox status 2>/dev/null)
    log_debug "Current status: $status"  # This helps with debugging

    # Compare the status and act accordingly
    if [[ "$status" == "Playing" ]]; then
        log_debug "Media is playing."
        if [ -z "$inhibit_pid" ]; then
            inhibit_sleep
        fi
    else
        log_debug "Media is not playing."
        if [ -n "$inhibit_pid" ]; then
            allow_sleep
        fi
    fi

    # Check the status every 15 seconds
    sleep 15
done


1730036792652.png
 
Diğer servis dosyalarının yetkilendirme kodlarıyla karşılaştırma yapınız.
 
"journalctl -u firefox-media-inhibit" ile komutun loglarını görebilirsiniz.
sercan@Z690F:~$ journalctl -u firefox-media-inhibit
...
-- Boot fe24f7243c3244e8a1605baaffdb1378 --
Oct 27 16:40:08 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:40:08 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:40:23 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:40:23 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:40:38 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:40:38 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:40:51 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:40:51 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:41:06 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:41:06 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:41:21 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:41:21 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:41:36 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:41:36 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:41:51 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:41:51 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:42:06 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:42:06 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:42:22 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:42:22 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:42:37 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:42:37 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:42:52 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:42:52 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:43:07 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:43:07 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:43:22 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:43:22 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:43:37 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:43:37 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:43:52 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:43:52 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:44:07 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:44:07 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:44:22 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:44:22 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:44:37 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:44:37 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:44:52 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:44:52 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:45:07 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:45:07 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:45:22 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:45:22 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:45:37 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:45:37 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:45:52 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:45:52 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:46:07 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:46:07 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:46:22 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:46:22 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:46:37 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:46:37 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:46:52 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:46:52 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:47:07 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:47:07 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
Oct 27 16:47:22 Z690F firefox_media_inhibit.sh[1076]: Current status:
Oct 27 16:47:22 Z690F firefox_media_inhibit.sh[1076]: Media is not playing.
 
Mesela display manager servisi 777 imiş. Bu şekilde deneyin.
 

Forum istatistikleri

Konular
6,944
Mesajlar
118,668
Üyeler
2,821
Son üye
Sfkzdmr

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top