Почему текущий каталог не изменяется после выполнения скрипта? [duplicate]

Сценарий выполняется из оболочки как ./ oximeter .

Сценарий, oximeter , имеет 5 команд: [1237 Сценарий Python работает как положено. Я хотел бы, чтобы скрипт изменил каталог, как показано в команде # 4. Когда управление возвращается пользователю, каталог остается неизменным.

Второй pwd возвращает желаемый каталог, однако, когда управление возвращается пользователю, pwd указывает, что каталог не ~ / Documents / oximeter .

Почему это так и есть ли «более сильный» команда, которая изменяет целевой каталог для пользователя?

Это в Ubuntu 20.04.

1
задан 14 June 2020 в 21:12

1 ответ

Workaround

run the below command when fractional scale is not enabled.

enter image description here

gdbus call --session --dest org.gnome.Mutter.DisplayConfig --object-path /org/gnome/Mutter/DisplayConfig --method org.gnome.Mutter.DisplayConfig.GetCurrentState

Example:

$ gdbus call --session --dest org.gnome.Mutter.DisplayConfig --object-path /org/gnome/Mutter/DisplayConfig --method org.gnome.Mutter.DisplayConfig.GetCurrentState
(uint32 7, [(('eDP-1-1', 'SDC', '0x4141', '0x00000000'), [('1366x768@59.998008728027344', 1366, 768, 59.998008728027344, 1.0, [1.0, 2.0], {'is-preferred': <true>}), ('1360x768@59.798992156982422', 1360, 768, 59.798992156982422, 1.0, [1.0, 2.0], {}), ('1360x768@59.960025787353516', 1360, 768, 59.960025787353516, 1.0, [1.0, 2.0], {'is-current': <true>}), ('1280x720@120.00162506103516', 1280, 720, 120.00162506103516, 1.0, [1.0, 2.0], {}), ('1280x720@119.98211669921875', 1280, 720, 119.98211669921875, 1.0, [1.0, 2.0], {}), ('1280x720@59.855125427246094', 1280, 720, 59.855125427246094, 1.0, [1.0, 2.0], {}), ('1280x720@59.744712829589844', 1280, 720, 59.744712829589844, 1.0, [1.0, 2.0], {}), ('1024x768@120.07466888427734', 1024, 768, 120.07466888427734, 1.0, [1.0], {}), ('1024x768@60.003841400146484', 1024, 768, 60.003841400146484, 1.0, [1.0], {}), ('960x720@120', 960, 720, 120.0, 1.0, [1.0], {}), ('928x696@120.101318359375', 928, 696, 120.101318359375, 1.0, [1.0], {}), ('896x672@120.02888488769531', 896, 672, 120.02888488769531, 1.0, [1.0], {}), ('1024x576@119.90670776367188', 1024, 576, 119.90670776367188, 1.0, [1.0], {}), ('1024x576@119.91866302490234', 1024, 576, 119.91866302490234, 1.0, [1.0], {}), ('1024x576@59.899215698242188', 1024, 576, 59.899215698242188, 1.0, [1.0], {}), ('1024x576@59.819515228271484', 1024, 576, 59.819515228271484, 1.0, [1.0], {}), ('960x600@119.865478515625', 960, 600, 119.865478515625, 1.0, [1.0], {}), ('960x600@119.99750518798828', 960, 600, 119.99750518798828, 1.0, [1.0], {}), ('960x540@119.92568969726562', 960, 540, 119.92568969726562, 1.0, [1.0], {}), ('960x540@119.97574615478516', 960, 540, 119.97574615478516, 1.0, [1.0], {}), ('960x540@59.6290283203125', 960, 540, 59.6290283203125, 1.0, [1.0], {}), ('960x540@59.818218231201172', 960, 540, 59.818218231201172, 1.0, [1.0], {}), ('800x600@120', 800, 600, 120.0, 1.0, [1.0], {}), ('800x600@60.316539764404297', 800, 600, 60.316539764404297, 1.0, [1.0], {}), ('800x600@56.25', 800, 600, 56.25, 1.0, [1.0], {}), ('840x525@120.01870727539062', 840, 525, 120.01870727539062, 1.0, [1.0], {}), ('840x525@119.76650238037109', 840, 525, 119.76650238037109, 1.0, [1.0], {}), ('864x486@59.91534423828125', 864, 486, 59.91534423828125, 1.0, [1.0], {}), ('864x486@59.5703125', 864, 486, 59.5703125, 1.0, [1.0], {}), ('800x512@120.33700561523438', 800, 512, 120.33700561523438, 1.0, [1.0], {})], {'is-builtin': <true>, 'display-name': <'Built-in display'>})], [(0, 0, 1.0, uint32 0, true, [('eDP-1-1', 'SDC', '0x4141', '0x00000000')], @a{sv} {})], {'renderer': <'xrandr'>, 'layout-mode': <uint32 2>, 'global-scale-required': <true>, 'legacy-ui-scaling-factor': <1>, 'max-screen-size': <(16384, 16384)>})
$

from the above result, note that at the start of the output "(unit32 7" the value 7 varies and it is very important. Note that value in your case.

Next read the common pattern with many different values.. like this

'1366x768@59.998008728027344', 1366, 768, 59.998008728027344, 1.0, [1.0, 2.0]

1366x768@59.998008728027344: mode ID
1366: width in physical pixels
768: height in physical pixels
59.998008728027344: refresh rate
1.0: scale preferred as per calculations
[1.0, 2.0] : весы, поддерживаемые вышеуказанным режимом ( 1366x768@59.998008728027344 )

Это означает, что из доступных режимов .. (есть Есть много режимов в зависимости от выхода) Если вы выберете 1366x768@59.998008728027344 этот режим .. у вас есть только две доступные шкалы [1.0, 2.0]

Теперь включите дробную шкалу и повторите команду.

$ gdbus call --session --dest org.gnome.Mutter.DisplayConfig --object-path /org/gnome/Mutter/DisplayConfig --method org.gnome.Mutter.DisplayConfig.GetCurrentState
(uint32 7, [(('eDP-1-1', 'SDC', '0x4141', '0x00000000'), [('1366x768@59.998008728027344', 1366, 768, 59.998008728027344, 1.0, [1.0, 2.0], {'is-preferred': <true>}), ('1360x768@59.798992156982422', 1360, 768, 59.798992156982422, 1.0, [1.0, 1.2307692766189575, 1.4545454978942871, 1.7777777910232544, 2.0], {}), ('1360x768@59.960025787353516', 1360, 768, 59.960025787353516, 1.0, [1.0, 1.2307692766189575, 1.4545454978942871, 1.7777777910232544, 2.0], {'is-current': <true>}), ('1280x720@120.00162506103516', 1280, 720, 120.00162506103516, 1.0, [1.0, 1.25, 1.5094339847564697, 1.7391303777694702, 2.0], {}), ('1280x720@119.98211669921875', 1280, 720, 119.98211669921875, 1.0, [1.0, 1.25, 1.5094339847564697, 1.7391303777694702, 2.0], {}), ('1280x720@59.855125427246094', 1280, 720, 59.855125427246094, 1.0, [1.0, 1.25, 1.5094339847564697, 1.7391303777694702, 2.0], {}), ('1280x720@59.744712829589844', 1280, 720, 59.744712829589844, 1.0, [1.0, 1.25, 1.5094339847564697, 1.7391303777694702, 2.0], {}), ('1024x768@120.07466888427734', 1024, 768, 120.07466888427734, 1.0, [1.0, 1.2487804889678955, 1.4970760345458984], {}), ('1024x768@60.003841400146484', 1024, 768, 60.003841400146484, 1.0, [1.0, 1.2487804889678955, 1.4970760345458984], {}), ('960x720@120', 960, 720, 120.0, 1.0, [1.0, 1.25, 1.5], {}), ('928x696@120.101318359375', 928, 696, 120.101318359375, 1.0, [1.0, 1.2473118305206299], {}), ('896x672@120.02888488769531', 896, 672, 120.02888488769531, 1.0, [1.0, 1.251396656036377], {}), ('1024x576@119.90670776367188', 1024, 576, 119.90670776367188, 1.0, [1.0, 1.2799999713897705, 1.4883720874786377], {}), ('1024x576@119.91866302490234', 1024, 576, 119.91866302490234, 1.0, [1.0, 1.2799999713897705, 1.4883720874786377], {}), ('1024x576@59.899215698242188', 1024, 576, 59.899215698242188, 1.0, [1.0, 1.2799999713897705, 1.4883720874786377], {}), ('1024x576@59.819515228271484', 1024, 576, 59.819515228271484, 1.0, [1.0, 1.2799999713897705, 1.4883720874786377], {}), ('960x600@119.865478515625', 960, 600, 119.865478515625, 1.0, [1.0, 1.25, 1.5], {}), ('960x600@119.99750518798828', 960, 600, 119.99750518798828, 1.0, [1.0, 1.25, 1.5], {}), ('960x540@119.92568969726562', 960, 540, 119.92568969726562, 1.0, [1.0, 1.25, 1.5], {}), ('960x540@119.97574615478516', 960, 540, 119.97574615478516, 1.0, [1.0, 1.25, 1.5], {}), ('960x540@59.6290283203125', 960, 540, 59.6290283203125, 1.0, [1.0, 1.25, 1.5], {}), ('960x540@59.818218231201172', 960, 540, 59.818218231201172, 1.0, [1.0, 1.25, 1.5], {}), ('800x600@120', 800, 600, 120.0, 1.0, [1.0, 1.25], {}), ('800x600@60.316539764404297', 800, 600, 60.316539764404297, 1.0, [1.0, 1.25], {}), ('800x600@56.25', 800, 600, 56.25, 1.0, [1.0, 1.25], {}), ('840x525@120.01870727539062', 840, 525, 120.01870727539062, 1.0, [1.0, 1.25], {}), ('840x525@119.76650238037109', 840, 525, 119.76650238037109, 1.0, [1.0, 1.25], {}), ('864x486@59.91534423828125', 864, 486, 59.91534423828125, 1.0, [1.0, 1.2558139562606812], {}), ('864x486@59.5703125', 864, 486, 59.5703125, 1.0, [1.0, 1.2558139562606812], {}), ('800x512@120.33700561523438', 800, 512, 120.33700561523438, 1.0, [1.0, 1.2799999713897705], {})], {'is-builtin': <true>, 'display-name': <'Built-in display'>})], [(0, 0, 1.0, uint32 0, true, [('eDP-1-1', 'SDC', '0x4141', '0x00000000')], @a{sv} {})], {'renderer': <'xrandr'>, 'layout-mode': <uint32 3>, 'supports-changing-layout-mode': <true>, 'x11-fractional-scaling': <true>, 'legacy-ui-scaling-factor': <1>, 'max-screen-size': <(16384, 16384)>})
$

На этот раз наблюдайте за линиями снова,

'1360x768@59.960025787353516', 1360, 768, 59.960025787353516, 1.0, [1.0, 1.2307692766189575, 1.4545454978942871, 1.7777777910232544, 2.0]

Наблюдайте что теперь доступные весы изменены. это означает, что вы можете установить с вышеприведенного выхода 1.23 .......... или 1.45 .......... или 1.77 ....... или 2.0

, так как мой ноутбук 1366x768 у него меньше доступных масштабов ... но когда я подключу его к своему 4K-телевизору ... у меня будет больше доступных весов ... В вашем случае ... ваш ноутбук имеет высокую пикселизацию, у вас будет больше вариантов для желаемого разрешения 3840x2168

Поэтому сначала запустите команду

gdbus call --session --dest org.gnome.Mutter.DisplayConfig --object-path /org/gnome/Mutter/DisplayConfig --method org.gnome.Mutter.DisplayConfig.GetCurrentState

и запишите значения

, например:

  1. 7 в Unit32 7 в начале вывода вышеуказанной команды

  2. 1360x768@59.798992156982422скрипт py из каталога, и вам сначала нужно cd там

    (например, в скрипте :) cd $ (dirname ~ / myfolder / myscript.py) ; python3 myscript.py


    вы можете узнать местоположение вашего скрипта на python с помощью:

    print('abspath:     ', os.path.abspath(__file__))
    print('abs dirname: ', os.path.dirname(os.path.abspath(__file__)))
    

    https://www.tutorialspoint.com/python3/os_getcwd.htm

    -------- -121 -------- 863268 ----

    Вы смотрели на Нгрок? ( https://ngrok.com )

    В основном запустите

    ngrok tcp 22

    на локальном компьютере, на который вы хотите подключиться по ssh.

    Вы получите имя хоста и порт что вы можете использовать ssh с удаленных компьютеров, которые пересылаются на локальный компьютер с запущенным ngrok.

    ngrok by @inconshreveable                                                                              
    (Ctrl+C to quit)                                                                                                                        
    Session Status                online                                                                                    
    Account                       Dwayne Moore (Plan: Free)                                                                 
    Version                       2.3.35                                                                                    
    Region                        United States (us)                                                                        
    Web Interface                 http://127.0.0.1:4040                                                                     
    Forwarding                    tcp://0.tcp.ngrok.io:12048 -> localhost:22                                                                                                                                                                        
    Connections                   ttl     opn     rt1     rt5     p50     p90                                                                             
    15      1       0.16    0.04    2.30    2.31
    

    Например:

    ssh python3 myscript.py


    вы можете получить местоположение вашего скрипта Python в python с помощью:

    print('abspath:     ', os.path.abspath(__file__))
    print('abs dirname: ', os.path.dirname(os.path.abspath(__file__)))
    

    https://www.tutorialspoint.com/python3/os_getcwd.htm

-1
ответ дан 19 June 2020 в 21:24

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

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