Кросс-инсталляционные программы

Ubuntu Одна команда только что выпустила онлайн-магазин Ubuntu One Music. Вы можете просматривать и загружать музыку с веб-браузера с https://one.ubuntu.com/music-store/.

Музыкальный магазин работает независимо от операционной системы. Итак, если вы находитесь на компьютере, отличном от Ubuntu, вы все равно можете использовать онлайн-магазин музыки с помощью веб-браузера.

https: //one.ubuntu. ком / музыка-магазин /

4
задан 15 March 2018 в 23:17

9 ответов

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

Вы должны иметь возможность установить его для того, чтобы лицензии были разделены, если они вам нужны, и вы можете настроить его так, чтобы файлы, которые были созданы, совместно используются и, возможно, даже IDE-настройка но сами программы должны быть установлены в каждой системе.

Одним из способов обхода может быть настройка пересылки x11 с одной ОС на другую, но для этого потребуется, чтобы обе операционные системы работали в то же время, что было бы довольно janky.

As если у вас было 2 раздела с Ubuntu вместо Ubuntu и Windows, это, вероятно, было бы возможно.

3
ответ дан 22 May 2018 в 12:33

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

Вы должны иметь возможность установить его для того, чтобы лицензии были разделены, если они вам нужны, и вы можете настроить его так, чтобы файлы, которые были созданы, совместно используются и, возможно, даже IDE-настройка но сами программы должны быть установлены в каждой системе.

Одним из способов обхода может быть настройка пересылки x11 с одной ОС на другую, но для этого потребуется, чтобы обе операционные системы работали в то же время, что было бы довольно janky.

As если у вас было 2 раздела с Ubuntu вместо Ubuntu и Windows, это, вероятно, было бы возможно.

3
ответ дан 17 July 2018 в 18:45

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

Вы должны иметь возможность установить его для того, чтобы лицензии были разделены, если они вам нужны, и вы можете настроить его так, чтобы файлы, которые были созданы, совместно используются и, возможно, даже IDE-настройка но сами программы должны быть установлены в каждой системе.

Одним из способов обхода может быть настройка пересылки x11 из одной ОС в другую, но для этого потребуется, чтобы обе операционные системы работали одновременно, что было бы довольно janky.

As если у вас было 2 раздела с Ubuntu вместо Ubuntu и Windows, это, вероятно, было бы возможно.

3
ответ дан 23 July 2018 в 19:34

Вы можете сделать это для Ubuntu Bash на Windows

Вот моя настройка раздела:

$ lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MODEL
NAME        FSTYPE LABEL            MOUNTPOINT   SIZE MODEL
sda                                            931.5G HGST HTS721010A9
├─sda4      ntfs   WINRETOOLS                    450M 
├─sda2                                           128M 
├─sda5      ntfs   Image                        11.4G 
├─sda3      ntfs   HGST_Win10       /mnt/d       919G 
└─sda1      vfat   ESP                           500M 
nvme0n1                                          477G Samsung SSD 960 PRO 512GB           
├─nvme0n1p5 ext4   NVMe_Ubuntu_16.0 /           44.6G 
├─nvme0n1p3                                       16M 
├─nvme0n1p1 ntfs                                 450M 
├─nvme0n1p6 swap   Linux Swap       [SWAP]       7.9G 
├─nvme0n1p4 ntfs   NVMe_Win10       /mnt/c     414.9G 
├─nvme0n1p2 vfat                    /boot/efi     99M 
└─nvme0n1p7 ntfs   Shared_WSL+Linux /mnt/e         9G 

nvme0n1p7 используется совместно с Windows и Ubuntu

Я настраиваю разделение на 9 ГБ, которое WSL (подсистема Windows для Linux) и Ubuntu может иметь на своих путях и запускать программы. Вот дерево для него:

$ sudo tree /mnt/e -d 
/mnt/e
├── bin
├── boot
│   └── grub
│       ├── fonts
│       ├── i386-pc
│       └── locale
├── Desktop
├── Documents
├── Downloads
│   └── WinScreeny-master
├── etc
│   ├── apt
│   │   ├── sources.list.d
│   │   └── trusted.gpg.d
│   ├── cron.d
│   │   └── test-directory
│   ├── cron.daily
│   ├── cron.hourly
│   ├── cron.monthly
│   ├── cron.weekly
│   ├── default
│   ├── ssmtp
│   └── systemd
│       ├── network
│       ├── system
│       │   ├── bluetooth.target.wants
│       │   ├── default.target.wants
│       │   ├── display-manager.service.wants
│       │   ├── final.target.wants
│       │   ├── getty.target.wants
│       │   ├── graphical.target.wants
│       │   ├── hibernate.target.wants
│       │   ├── hybrid-sleep.target.wants
│       │   ├── multi-user.target.wants
│       │   ├── network-online.target.wants
│       │   ├── paths.target.wants
│       │   ├── printer.target.wants
│       │   ├── sleep.target.wants
│       │   ├── sockets.target.wants
│       │   ├── suspend.target.wants
│       │   ├── sysinit.target.wants
│       │   └── timers.target.wants
│       └── user
├── lib
│   └── systemd
│       └── system-sleep
├── $RECYCLE.BIN
│   └── S-1-5-21-1568003092-1971238075-3041751339-1001
├── System Volume Information
├── Temporary Work
├── usr
│   ├── local
│   │   └── bin
│   │       ├── bell
│   │       │   └── sounds
│   │       ├── startup-scripts
│   │       └── zap
│   │           └── Assembly-Intro-hello
│   │               ├── BeOS
│   │               ├── FreeBSD
│   │               └── Linux
│   └── share
│       └── plymouth
│           └── themes
│               ├── details
│               ├── earth-sunrise
│               ├── text
│               ├── tribar
│               ├── ubuntu-logo
│               └── ubuntu-text
└── wsl-linux-tmp

71 directories

Создание гибридной программы

Я взял одну из моих программ bash: Приложение, которое заблокирует экран после установить время Ubuntu и изменить его для распознавания при работе под Windows 10 и выдавать команды powershell вместо команд Ubuntu для сообщений и системных звуков.

Например, вот фрагмент кода для проверки если среда является Windows и использует другую команду, чем в Ubuntu:

if [[ $WSL_running == true ]]; then  
    powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();'
else
    ogg123 '/usr/share/sounds/ubuntu/stereo/phone-outgoing-calling.ogg' ;
fi

Вот полный код bash после того, как приложение было сделано гибридом Windows / Ubuntu:

$ cat /mnt/e/bin/lock-screen-timer
#!/bin/bash

# NAME: lock-screen-timer
# PATH: $HOME/bin
# DESC: Lock screen in x minutes
# CALL: Place on Desktop or call from Terminal with "lock-screen-timer 99"
# DATE: Created Nov 19, 2016. Last revision Nov 12, 2017.
# UPDT: Updated to support WSL (Windows Subsystem for Linux)

# NOTE: Time defaults to 30 minutes.
#       If previous version is sleeping it is killed.
#       Zenity is used to pop up entry box to get number of minutes.
#       If zenity is closed with X or Cancel, no screen lock timer is launched.
#       Pending lock warning displayed on-screen at set intervals.
#       Write time remaining to ~/.lock-screen-timer-remaining

MINUTES="$1" # Optional parameter 1 when invoked from terminal.

# if no parameters set default MINUTES to 30
if [ $# == 0 ]; then
    MINUTES=30
fi

DEFAULT="$MINUTES" # When looping, minutes count down to zero. Save deafult for subsequent timers.

# Check if lock screen timer already running
pID=$(pgrep -f "${0##*/}") # All PIDs matching lock-screen-timer name
PREVIOUS=$(echo "$pID" | grep -v ^"$$") # Strip out this running copy ($$$)
if [ "$PREVIOUS" != "" ]; then
    kill "$PREVIOUS"
    rm ~/.lock-screen-timer-remaining
    zenity --info --title="Lock screen timer already running" --text="Previous lock screen timer has been terminated."
fi

# Running under WSL (Windows Subsystem for Linux)?
if cat /proc/version | grep Microsoft; then
    WSL_running=true
else
    WSL_running=false
fi


while true ; do # loop until cancel

    # Get number of minutes until lock from user
    MINUTES=$(zenity --entry --title="Lock screen timer" --text="Set number of minutes until lock" --entry-text="$DEFAULT")

    RESULT=$? # Zenity return code
    if [ $RESULT != 0 ]; then
        break ; # break out of timer lock screen loop and end this script.
    fi

    DEFAULT="$MINUTES" # Save deafult for subsequent timers.
    if [[ $MINUTES == 0 ]] || [[ $MINUTES == "" ]]; then
        break ; # zero minutes considered cancel.
    fi

    # Loop for X minutes, testing each minute for alert message.
    (( ++MINUTES )) 
    while (( --MINUTES > 0 )); do
        case $MINUTES in 1|2|3|5|10|15|30|45|60|120|480|960|1920)
            notify-send --urgency=critical --icon=/usr/share/icons/gnome/256x256/status/appointment-soon.png "Locking screen in ""$MINUTES"" minute(s)." ;
            if [[ $WSL_running == true ]]; then  
                powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();'
            else
               ogg123 '/usr/share/sounds/ubuntu/stereo/phone-outgoing-calling.ogg' ;
            fi
           ;;
        esac;

        # Record number of minutes remaining to file other processes can read.
        echo "$MINUTES Minutes" > ~/.lock-screen-timer-remaining

        sleep 60

    done

    rm ~/.lock-screen-timer-remaining # Remove work file others can see our progress with

    if [[ $WSL_running == true ]]; then  
        # Call lock screen for Windows 10
        rundll32.exe user32.dll,LockWorkStation
    else
        # Call screen saver lock for Unbuntu versions > 14.04.
        dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    fi

    # Reset sound to Laptop or HDMI TV - Uncomment to fix sound device changing
    #    sleep 5 # HDMI deactivates when screen turned off. Give 5 seconds for TV to resync screen.
    #    hotplugtv

done # End of while loop getting minutes to next lock screen

exit 0 # Closed dialog box or "Cancel" selected.
1
ответ дан 22 May 2018 в 12:33
  • 1
    Интересно, так что вы получили это, чтобы работать для вашего собственного скрипта BASH (или, по крайней мере, одного из них, который вы могли бы изменить для кода), но вы тестировали такие вещи, как IDE или другие сложные программы, например OP? – Jeff 16 March 2018 в 15:45
  • 2
    @Jeff Да, он отлично работает, и это заняло немного поисковых систем в PowerShell. К сожалению, я все еще начинаю сценарист bash и еще не продвинул цепочку продуктов на Python. Это может быть либо в Python, если библиотеки для Ubuntu и библиотеки для Windows автоматически будут получены. Не уверен, хотя ... – WinEunuuchs2Unix 16 March 2018 в 15:48

Для почти всех программ нет. Это связано с тем, что Windows и Linux имеют разные интерфейсы API (Application Programming Interface) и системные вызовы. API-функции являются функциями и определяют, как программы взаимодействуют друг с другом. Как правило, они включаются в библиотеки или могут быть частью операционной системы. Системные вызовы определяют, как программы запрашивают аппаратную поддержку / активность из ядра. Можно перевести вызовы API и системные вызовы одной операционной системы в другую, но для этого требуется огромное количество усилий. WINE на самом деле является ярким примером перевода API Windows в POSIX (например, Linux). Это создает уровень совместимости между Windows и Linux, позволяя некоторым программам Windows работать в Linux. Кроме того, Windows и Linux имеют разные бинарные исполняемые форматы. Windows имеет формат Portable Executable (PE), а Linux имеет ELF (исполняемый совместимый формат).

Все, что было сказано, я не думаю, что то, что вы пытаетесь достичь, возможно без значительных усилий. Возможно (возможно, большой), вы можете установить WINE и настроить его на своем общем разделе, чтобы он мог хранить программы для Windows и Linux. Но это дикая теория. То, что парень-пользователь Джефф сказал в отношении лицензий и других файлов, скорее всего, будет возможен и намного легче выполнить.

0
ответ дан 22 May 2018 в 12:33

Для почти всех программ нет. Это связано с тем, что Windows и Linux имеют разные интерфейсы API (Application Programming Interface) и системные вызовы. API-функции являются функциями и определяют, как программы взаимодействуют друг с другом. Как правило, они включаются в библиотеки или могут быть частью операционной системы. Системные вызовы определяют, как программы запрашивают аппаратную поддержку / активность из ядра. Можно перевести вызовы API и системные вызовы одной операционной системы в другую, но для этого требуется огромное количество усилий. WINE на самом деле является ярким примером перевода API Windows в POSIX (например, Linux). Это создает уровень совместимости между Windows и Linux, позволяя некоторым программам Windows работать в Linux. Кроме того, Windows и Linux имеют разные бинарные исполняемые форматы. Windows имеет формат Portable Executable (PE), а Linux имеет ELF (исполняемый совместимый формат).

Все, что было сказано, я не думаю, что то, что вы пытаетесь достичь, возможно без значительных усилий. Возможно (возможно, большой), вы можете установить WINE и настроить его на своем общем разделе, чтобы он мог хранить программы для Windows и Linux. Но это дикая теория. То, что парень-пользователь Джефф сказал в отношении лицензий и других файлов, скорее всего, будет возможен и намного легче выполнить.

0
ответ дан 17 July 2018 в 18:45

Вы можете сделать это для Ubuntu Bash на Windows

Вот моя настройка раздела:

$ lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MODEL NAME FSTYPE LABEL MOUNTPOINT SIZE MODEL sda 931.5G HGST HTS721010A9 ├─sda4 ntfs WINRETOOLS 450M ├─sda2 128M ├─sda5 ntfs Image 11.4G ├─sda3 ntfs HGST_Win10 /mnt/d 919G └─sda1 vfat ESP 500M nvme0n1 477G Samsung SSD 960 PRO 512GB ├─nvme0n1p5 ext4 NVMe_Ubuntu_16.0 / 44.6G ├─nvme0n1p3 16M ├─nvme0n1p1 ntfs 450M ├─nvme0n1p6 swap Linux Swap [SWAP] 7.9G ├─nvme0n1p4 ntfs NVMe_Win10 /mnt/c 414.9G ├─nvme0n1p2 vfat /boot/efi 99M └─nvme0n1p7 ntfs Shared_WSL+Linux /mnt/e 9G

nvme0n1p7 используется совместно с Windows и Ubuntu

Я настраиваю разделение на 9 ГБ, которое WSL (подсистема Windows для Linux) и Ubuntu может иметь на своих путях и запускать программы. Вот дерево для него:

$ sudo tree /mnt/e -d /mnt/e ├── bin ├── boot │   └── grub │   ├── fonts │   ├── i386-pc │   └── locale ├── Desktop ├── Documents ├── Downloads │   └── WinScreeny-master ├── etc │   ├── apt │   │   ├── sources.list.d │   │   └── trusted.gpg.d │   ├── cron.d │   │   └── test-directory │   ├── cron.daily │   ├── cron.hourly │   ├── cron.monthly │   ├── cron.weekly │   ├── default │   ├── ssmtp │   └── systemd │   ├── network │   ├── system │   │   ├── bluetooth.target.wants │   │   ├── default.target.wants │   │   ├── display-manager.service.wants │   │   ├── final.target.wants │   │   ├── getty.target.wants │   │   ├── graphical.target.wants │   │   ├── hibernate.target.wants │   │   ├── hybrid-sleep.target.wants │   │   ├── multi-user.target.wants │   │   ├── network-online.target.wants │   │   ├── paths.target.wants │   │   ├── printer.target.wants │   │   ├── sleep.target.wants │   │   ├── sockets.target.wants │   │   ├── suspend.target.wants │   │   ├── sysinit.target.wants │   │   └── timers.target.wants │   └── user ├── lib │   └── systemd │   └── system-sleep ├── $RECYCLE.BIN │   └── S-1-5-21-1568003092-1971238075-3041751339-1001 ├── System Volume Information ├── Temporary Work ├── usr │   ├── local │   │   └── bin │   │   ├── bell │   │   │   └── sounds │   │   ├── startup-scripts │   │   └── zap │   │   └── Assembly-Intro-hello │   │   ├── BeOS │   │   ├── FreeBSD │   │   └── Linux │   └── share │   └── plymouth │   └── themes │   ├── details │   ├── earth-sunrise │   ├── text │   ├── tribar │   ├── ubuntu-logo │   └── ubuntu-text └── wsl-linux-tmp 71 directories

Создание гибридной программы

Я взял одну из моих программ bash: Приложение, которое заблокирует экран после установить время Ubuntu и изменить его для распознавания при работе под Windows 10 и выдавать команды powershell вместо команд Ubuntu для сообщений и системных звуков.

Например, вот фрагмент кода для проверки если среда является Windows и использует другую команду, чем в Ubuntu:

if [[ $WSL_running == true ]]; then powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();' else ogg123 '/usr/share/sounds/ubuntu/stereo/phone-outgoing-calling.ogg' ; fi

Вот полный код bash после того, как приложение было сделано гибридом Windows / Ubuntu:

$ cat /mnt/e/bin/lock-screen-timer #!/bin/bash # NAME: lock-screen-timer # PATH: $HOME/bin # DESC: Lock screen in x minutes # CALL: Place on Desktop or call from Terminal with "lock-screen-timer 99" # DATE: Created Nov 19, 2016. Last revision Nov 12, 2017. # UPDT: Updated to support WSL (Windows Subsystem for Linux) # NOTE: Time defaults to 30 minutes. # If previous version is sleeping it is killed. # Zenity is used to pop up entry box to get number of minutes. # If zenity is closed with X or Cancel, no screen lock timer is launched. # Pending lock warning displayed on-screen at set intervals. # Write time remaining to ~/.lock-screen-timer-remaining MINUTES="$1" # Optional parameter 1 when invoked from terminal. # if no parameters set default MINUTES to 30 if [ $# == 0 ]; then MINUTES=30 fi DEFAULT="$MINUTES" # When looping, minutes count down to zero. Save deafult for subsequent timers. # Check if lock screen timer already running pID=$(pgrep -f "${0##*/}") # All PIDs matching lock-screen-timer name PREVIOUS=$(echo "$pID" | grep -v ^"$$") # Strip out this running copy ($$$) if [ "$PREVIOUS" != "" ]; then kill "$PREVIOUS" rm ~/.lock-screen-timer-remaining zenity --info --title="Lock screen timer already running" --text="Previous lock screen timer has been terminated." fi # Running under WSL (Windows Subsystem for Linux)? if cat /proc/version | grep Microsoft; then WSL_running=true else WSL_running=false fi while true ; do # loop until cancel # Get number of minutes until lock from user MINUTES=$(zenity --entry --title="Lock screen timer" --text="Set number of minutes until lock" --entry-text="$DEFAULT") RESULT=$? # Zenity return code if [ $RESULT != 0 ]; then break ; # break out of timer lock screen loop and end this script. fi DEFAULT="$MINUTES" # Save deafult for subsequent timers. if [[ $MINUTES == 0 ]] || [[ $MINUTES == "" ]]; then break ; # zero minutes considered cancel. fi # Loop for X minutes, testing each minute for alert message. (( ++MINUTES )) while (( --MINUTES > 0 )); do case $MINUTES in 1|2|3|5|10|15|30|45|60|120|480|960|1920) notify-send --urgency=critical --icon=/usr/share/icons/gnome/256x256/status/appointment-soon.png "Locking screen in ""$MINUTES"" minute(s)." ; if [[ $WSL_running == true ]]; then powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();' else ogg123 '/usr/share/sounds/ubuntu/stereo/phone-outgoing-calling.ogg' ; fi ;; esac; # Record number of minutes remaining to file other processes can read. echo "$MINUTES Minutes" > ~/.lock-screen-timer-remaining sleep 60 done rm ~/.lock-screen-timer-remaining # Remove work file others can see our progress with if [[ $WSL_running == true ]]; then # Call lock screen for Windows 10 rundll32.exe user32.dll,LockWorkStation else # Call screen saver lock for Unbuntu versions > 14.04. dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock fi # Reset sound to Laptop or HDMI TV - Uncomment to fix sound device changing # sleep 5 # HDMI deactivates when screen turned off. Give 5 seconds for TV to resync screen. # hotplugtv done # End of while loop getting minutes to next lock screen exit 0 # Closed dialog box or "Cancel" selected.
1
ответ дан 17 July 2018 в 18:45

Для почти всех программ нет. Это связано с тем, что Windows и Linux имеют разные интерфейсы API (Application Programming Interface) и системные вызовы. API-функции являются функциями и определяют, как программы взаимодействуют друг с другом. Как правило, они включаются в библиотеки или могут быть частью операционной системы. Системные вызовы определяют, как программы запрашивают аппаратную поддержку / активность из ядра. Можно перевести вызовы API и системные вызовы одной операционной системы в другую, но для этого требуется огромное количество усилий. WINE на самом деле является ярким примером перевода API Windows в POSIX (например, Linux). Это создает уровень совместимости между Windows и Linux, позволяя некоторым программам Windows работать в Linux. Кроме того, Windows и Linux имеют разные бинарные исполняемые форматы. Windows имеет формат Portable Executable (PE), а Linux имеет ELF (исполняемый совместимый формат).

Все, что было сказано, я не думаю, что то, что вы пытаетесь достичь, возможно без значительных усилий. Возможно (возможно, большой), вы можете установить WINE и настроить его на своем общем разделе, чтобы он мог хранить программы для Windows и Linux. Но это дикая теория. То, что парень-пользователь Джефф сказал в отношении лицензий и других файлов, скорее всего, будет возможен и намного легче выполнить.

0
ответ дан 23 July 2018 в 19:34

Вы можете сделать это для Ubuntu Bash на Windows

Вот моя настройка раздела:

$ lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MODEL NAME FSTYPE LABEL MOUNTPOINT SIZE MODEL sda 931.5G HGST HTS721010A9 ├─sda4 ntfs WINRETOOLS 450M ├─sda2 128M ├─sda5 ntfs Image 11.4G ├─sda3 ntfs HGST_Win10 /mnt/d 919G └─sda1 vfat ESP 500M nvme0n1 477G Samsung SSD 960 PRO 512GB ├─nvme0n1p5 ext4 NVMe_Ubuntu_16.0 / 44.6G ├─nvme0n1p3 16M ├─nvme0n1p1 ntfs 450M ├─nvme0n1p6 swap Linux Swap [SWAP] 7.9G ├─nvme0n1p4 ntfs NVMe_Win10 /mnt/c 414.9G ├─nvme0n1p2 vfat /boot/efi 99M └─nvme0n1p7 ntfs Shared_WSL+Linux /mnt/e 9G

nvme0n1p7 используется совместно с Windows и Ubuntu

Я настраиваю разделение на 9 ГБ, которое WSL (подсистема Windows для Linux) и Ubuntu может иметь на своих путях и запускать программы. Вот дерево для него:

$ sudo tree /mnt/e -d /mnt/e ├── bin ├── boot │   └── grub │   ├── fonts │   ├── i386-pc │   └── locale ├── Desktop ├── Documents ├── Downloads │   └── WinScreeny-master ├── etc │   ├── apt │   │   ├── sources.list.d │   │   └── trusted.gpg.d │   ├── cron.d │   │   └── test-directory │   ├── cron.daily │   ├── cron.hourly │   ├── cron.monthly │   ├── cron.weekly │   ├── default │   ├── ssmtp │   └── systemd │   ├── network │   ├── system │   │   ├── bluetooth.target.wants │   │   ├── default.target.wants │   │   ├── display-manager.service.wants │   │   ├── final.target.wants │   │   ├── getty.target.wants │   │   ├── graphical.target.wants │   │   ├── hibernate.target.wants │   │   ├── hybrid-sleep.target.wants │   │   ├── multi-user.target.wants │   │   ├── network-online.target.wants │   │   ├── paths.target.wants │   │   ├── printer.target.wants │   │   ├── sleep.target.wants │   │   ├── sockets.target.wants │   │   ├── suspend.target.wants │   │   ├── sysinit.target.wants │   │   └── timers.target.wants │   └── user ├── lib │   └── systemd │   └── system-sleep ├── $RECYCLE.BIN │   └── S-1-5-21-1568003092-1971238075-3041751339-1001 ├── System Volume Information ├── Temporary Work ├── usr │   ├── local │   │   └── bin │   │   ├── bell │   │   │   └── sounds │   │   ├── startup-scripts │   │   └── zap │   │   └── Assembly-Intro-hello │   │   ├── BeOS │   │   ├── FreeBSD │   │   └── Linux │   └── share │   └── plymouth │   └── themes │   ├── details │   ├── earth-sunrise │   ├── text │   ├── tribar │   ├── ubuntu-logo │   └── ubuntu-text └── wsl-linux-tmp 71 directories

Создание гибридной программы

Я взял одну из моих программ bash: Приложение, которое заблокирует экран после установить время Ubuntu и изменить его для распознавания при работе под Windows 10 и выдавать команды powershell вместо команд Ubuntu для сообщений и системных звуков.

Например, вот фрагмент кода для проверки если среда является Windows и использует другую команду, чем в Ubuntu:

if [[ $WSL_running == true ]]; then powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();' else ogg123 '/usr/share/sounds/ubuntu/stereo/phone-outgoing-calling.ogg' ; fi

Вот полный код bash после того, как приложение было сделано гибридом Windows / Ubuntu:

$ cat /mnt/e/bin/lock-screen-timer #!/bin/bash # NAME: lock-screen-timer # PATH: $HOME/bin # DESC: Lock screen in x minutes # CALL: Place on Desktop or call from Terminal with "lock-screen-timer 99" # DATE: Created Nov 19, 2016. Last revision Nov 12, 2017. # UPDT: Updated to support WSL (Windows Subsystem for Linux) # NOTE: Time defaults to 30 minutes. # If previous version is sleeping it is killed. # Zenity is used to pop up entry box to get number of minutes. # If zenity is closed with X or Cancel, no screen lock timer is launched. # Pending lock warning displayed on-screen at set intervals. # Write time remaining to ~/.lock-screen-timer-remaining MINUTES="$1" # Optional parameter 1 when invoked from terminal. # if no parameters set default MINUTES to 30 if [ $# == 0 ]; then MINUTES=30 fi DEFAULT="$MINUTES" # When looping, minutes count down to zero. Save deafult for subsequent timers. # Check if lock screen timer already running pID=$(pgrep -f "${0##*/}") # All PIDs matching lock-screen-timer name PREVIOUS=$(echo "$pID" | grep -v ^"$$") # Strip out this running copy ($$$) if [ "$PREVIOUS" != "" ]; then kill "$PREVIOUS" rm ~/.lock-screen-timer-remaining zenity --info --title="Lock screen timer already running" --text="Previous lock screen timer has been terminated." fi # Running under WSL (Windows Subsystem for Linux)? if cat /proc/version | grep Microsoft; then WSL_running=true else WSL_running=false fi while true ; do # loop until cancel # Get number of minutes until lock from user MINUTES=$(zenity --entry --title="Lock screen timer" --text="Set number of minutes until lock" --entry-text="$DEFAULT") RESULT=$? # Zenity return code if [ $RESULT != 0 ]; then break ; # break out of timer lock screen loop and end this script. fi DEFAULT="$MINUTES" # Save deafult for subsequent timers. if [[ $MINUTES == 0 ]] || [[ $MINUTES == "" ]]; then break ; # zero minutes considered cancel. fi # Loop for X minutes, testing each minute for alert message. (( ++MINUTES )) while (( --MINUTES > 0 )); do case $MINUTES in 1|2|3|5|10|15|30|45|60|120|480|960|1920) notify-send --urgency=critical --icon=/usr/share/icons/gnome/256x256/status/appointment-soon.png "Locking screen in ""$MINUTES"" minute(s)." ; if [[ $WSL_running == true ]]; then powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();' else ogg123 '/usr/share/sounds/ubuntu/stereo/phone-outgoing-calling.ogg' ; fi ;; esac; # Record number of minutes remaining to file other processes can read. echo "$MINUTES Minutes" > ~/.lock-screen-timer-remaining sleep 60 done rm ~/.lock-screen-timer-remaining # Remove work file others can see our progress with if [[ $WSL_running == true ]]; then # Call lock screen for Windows 10 rundll32.exe user32.dll,LockWorkStation else # Call screen saver lock for Unbuntu versions > 14.04. dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock fi # Reset sound to Laptop or HDMI TV - Uncomment to fix sound device changing # sleep 5 # HDMI deactivates when screen turned off. Give 5 seconds for TV to resync screen. # hotplugtv done # End of while loop getting minutes to next lock screen exit 0 # Closed dialog box or "Cancel" selected.
1
ответ дан 23 July 2018 в 19:34
  • 1
    Интересно, так что вы получили это, чтобы работать для вашего собственного скрипта BASH (или, по крайней мере, одного из них, который вы могли бы изменить для кода), но вы тестировали такие вещи, как IDE или другие сложные программы, например OP? – Jeff 16 March 2018 в 15:45
  • 2
    @Jeff Да, он отлично работает, и это заняло немного поисковых систем в PowerShell. К сожалению, я все еще начинаю сценарист bash и еще не продвинул цепочку продуктов на Python. Это может быть либо в Python, если библиотеки для Ubuntu и библиотеки для Windows автоматически будут получены. Не уверен, хотя ... – WinEunuuchs2Unix 16 March 2018 в 15:48

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

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