Невозможно открыть файл блокировки / var / lib / dpkg / lock, даже если вы используете sudo

Решение этого просто. Во-первых, после приостановки и возобновления программа pm-suspend выполняет серию скриптов в /etc/pm/sleep.d и /usr/lib/pm-utils/sleep.d. Поэтому мое решение заключается в добавлении скрипта, который выполняет следующие действия:

После приостановки записи текущего времени и регистрации события пробуждения с использованием rtcwake. После возобновления проверьте текущее время на указанное время сверху. Если прошло достаточно времени, мы, вероятно, проснулись из-за события таймера rtc. В противном случае мы рано проснулись из-за пользовательского события (например, открытия экрана ноутбука). Если мы проснулись из-за таймера rtc, немедленно выпустите команду «pm-hibernate», чтобы перейти в спящий режим.

Вот сценарий, который делает это. Назовите его 0000rtchibernate и поместите его в каталог /etc/pm/sleep.d (значение 0000 важно, так что сценарий выполняется сначала при приостановке и последний раз в возобновлении).

#!/bin/bash
# Script name: /etc/pm/sleep.d/0000rtchibernate
# Purpose: Auto hibernates after a period of sleep
# Edit the "autohibernate" variable below to set the number of seconds to sleep.
curtime=$(date +%s)
autohibernate=7200
echo "$curtime $1" >>/tmp/autohibernate.log
if [ "$1" = "suspend" ]
then
    # Suspending.  Record current time, and set a wake up timer.
    echo "$curtime" >/var/run/pm-utils/locks/rtchibernate.lock
    rtcwake -m no -s $autohibernate
fi

if [ "$1" = "resume" ]
then
    # Coming out of sleep
    sustime=$(cat /var/run/pm-utils/locks/rtchibernate.lock)
    rm /var/run/pm-utils/locks/rtchibernate.lock
    # Did we wake up due to the rtc timer above?
    if [ $(($curtime - $sustime)) -ge $autohibernate ]
    then
        # Then hibernate
        rm /var/run/pm-utils/locks/pm-suspend.lock
        /usr/sbin/pm-hibernate
    else
        # Otherwise cancel the rtc timer and wake up normally.
        rtcwake -m no -s 1
    fi
fi

Надеюсь, этот код

Измените значение тайм-аута autohibernate=7200 вверху, на сколько бы секунд вы не спали, прежде чем переходить в спящий режим. Текущее значение выше 2 часов. Обратите внимание, что ваш ноутбук пробуждается в это время в течение нескольких секунд, в то время как он выполняет функцию спящего режима.

Итак, если вы планируете положить свой ноутбук в корпус, не приостанавливайте его, а вместо него сядьте в спячку. В противном случае ваш ноутбук может перегреться в esp. если он находится в плотно прилегающем корпусе (хотя он будет работать только на несколько секунд до минуты).

Я использовал этот метод в течение последних нескольких дней, пока он был успешным (и спас меня от мертвой батареи сегодня днем). Наслаждайтесь.

Для других дистрибутивов Linux, которые используют systemd и более новые версии Ubuntu, это должно работать, если вы поместите скрипт в /usr/lib/systemd/system-sleep вместо /etc/pm/sleep.d. Кроме того, замените команду /usr/sbin/pm-hibernate на systemctl hibernate.

1
задан 13 April 2017 в 15:23

4 ответа

sudo dpkg --configure -a

Затем повторите попытку.

Эта проблема также может возникнуть, если есть другие установки.

1
ответ дан 25 May 2018 в 08:43
  • 1
    Как объяснил в более раннем ответе , эта проблема вызвана одной из команд apt-get, которые необходимо запустить как root, а не выполняться как root. Конфигурирование всех полуинсталлированных пакетов (sudo dpkg --configure -a) не адресует это. – Eliah Kagan 14 July 2012 в 20:28
  • 2
    [F1] – Igor G. 25 July 2016 в 00:03

Попробуйте с помощью

sudo apt-get update 

Если вы все еще получите ошибку блокировки, попробуйте эту команду. Он даст деталь процесса

ps -e | grep -e apt -e adept | grep -v grep

Затем завершите процесс, используя идентификатор процесса, затем выполните update

И также вы можете удалить этот файл, который ваша проблема решит

rm /var/lib/dpkg/lock 

sudo dpkg --set-selections < package.list && sudo apt-get dselect-upgrade
1
ответ дан 25 May 2018 в 08:43

У меня была такая же ошибка, это сработало для меня:

Эта ошибка указывает, что вы (или какая-то программа / скрипт) изменили разрешения файла / var / lib / dpkg / status. Пожалуйста, измените их с помощью: «sudo chmod 644 / var / lib / dpkg / status», чтобы исправить проблему.

Я закончил открытие терминала:

sudo nautilus

, перемещаясь по папкам / файлам и меняя разрешения на

Эта ошибка указывает, что вы ( или какой-либо программы / скрипта) изменили разрешения файла / var / lib / dpkg / status. Пожалуйста, измените их с помощью: «sudo chmod 644 / var / lib / dpkg / status», чтобы устранить проблему.

ROOT - FOLDER: ПОЛНЫЙ ДОСТУП / ФАЙЛЫ: ПРОЧИТАТЬ ТОЛЬКО

ME - FOLDER: FULL ACCESS / FILES: READ WRITE

Проблема возникла, когда мои разрешения были привинчены при попытке исправить проблему ядра, которую я имел с драйвером Nvidia ... но это уже другая история ..

0
ответ дан 25 May 2018 в 08:43

В редкие времена вы можете получить эту проблему без других блокировок процесса dpkg для пользователя с привилегией sudo.

Я столкнулся с этой проблемой по неизвестным причинам, что потерял эту папку.

Я попробовал все другие предлагаемые здесь решения, но никто не работал. Мой простой способ - скопировать папку /var/lib/dpkg с другого сервера с той же версией Ubuntu.

Надеюсь, что это поможет, если с ними случится одно и то же.

0
ответ дан 25 May 2018 в 08:43

Другие вопросы по тегам:

Похожие вопросы: